Ne wie sollte die abfrage aussehen
Datenbank frage
- Gurkie94
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Füge das hier bei der Erstellung der Pflanzen (und beim Laden) hinzu:
HanfInfo[i][h_existiert] = true;
Wenn du eine Pflanze löschst:
HanfInfo[i][h_existiert] = false;Im enum:
bool:h_existiert,Und dann ändere beim Updaten:
if(HanfInfo[i][h_wasser]==0)
zu:
if(HanfInfo[i][h_wasser]==0 && HanfInfo[i][h_existiert])
Darunter entfernst du die Pflanze ja, also dort nicht vergessen, den Wert auf false zu setzen. -
-
-
ocmd:drogenkaufen(playerid, params[])
{
new query[250],samenan,string[126];
if(sInfo[playerid][inventar]==0)return SendClientMessage(playerid,Weiss,"Du besitzt kein Rucksack! Besorge dir eins im 24/7");
if(IsPlayerInRangeOfPoint(playerid,5,-1438.7542,-1543.4083,101.7578))
{
format(query,sizeof(query),"SELECT COUNT(besitzer) FROM hanf WHERE besitzer = '%s') ",SpielerName(playerid));
mysql_function_query(dbhandle,query,true,"Drogenanzahl","i",playerid);
if(sscanf(params,"i",samenan))return SendClientMessage(playerid,Weiss,"Benutzung: /drogenkaufen [anzahl drogensamen]");
{
if(sInfo[playerid][samen]+samenan<=maxdrogen[playerid])ich habe es jetzt in meinem Befehl
public Drogenanzahl(playerid)
{
new num_fields,num_rows,query[250];
cache_get_data(num_rows, num_fields, dbhandle);
new anzahl = cache_get_row_int(0, 0);
format(query,sizeof(query),"%i",anzahl);
SendClientMessage(playerid,Weiss,query);
for(new i=0; i<num_rows; i++)
{}
return 1;
}erstmal nur als test, muss das"anzahl" in die schleife rein ?
-
Die Schleife benötigst du hier gar nicht. Du kannst es so machen:
public Drogenanzahl(playerid)
{
new num_fields,num_rows,query[145], anzahl;
cache_get_data(num_rows, num_fields, dbhandle);
if(num_rows) anzahl = cache_get_row_int(0, 0);
format(query,sizeof(query),"%i",anzahl);
SendClientMessage(playerid,Weiss,query);
return 1;
} -
Ja aber er müsste mir ja den als Nachricht wenigstens die Anzahl anzeigen
Kommt aber nix
Warum ? -
format(query,sizeof(query),"SELECT COUNT(besitzer) FROM hanf WHERE besitzer = '%s') ",SpielerName(playerid));
format(query,sizeof(query),"SELECT COUNT(besitzer) FROM hanf WHERE besitzer = '%s' ",SpielerName(playerid));
-
format(query,sizeof(query),"SELECT COUNT(besitzer) FROM hanf WHERE besitzer = '%s') ",SpielerName(playerid));
format(query,sizeof(query),"SELECT COUNT(besitzer) FROM hanf WHERE besitzer = '%s' ",SpielerName(playerid));
Das würde ich aber lieber per MySQL-Query und seiner Cache-Funktion machen.
Da ist ein neues Public dafür in meinen Augen relativ ungeeignet (sofern R33+, keine Ahnung mehr inwiefern sich diese unterscheiden).Sprich:
new Cache:result = mysql_query(verbindungsid,query,true);
Dann einfach den Inhalt auslesen und mit cache_delete(result); den Speicher bereinigen. -
Da ist ein neues Public dafür in meinen Augen relativ ungeeignet
Darf ich fragen warum?
-
-
-
if(strlen(inputtext) >= 4)
{
//Mach was
} -
Danke dir
-
Darf ich fragen warum?
Klar,
es nimmt zusätzliche Ressourcen für einen Wiedergabewert ein, den man auch über das "kleinere" Verfahren herauskriegen kann.
Ist in meinen Augen übersichtlicher und kompakter, ist aber im Endeffekt Geschmackssache.Es geht ja schließlich um eine X-Zahl.
-
Bin mir dabei nicht sicher aber wenn du direkt das Ergebnis abfragst ohne callback kann es passieren dass das Spiel laggt wenn der MySQL Server (warum auch immer) länger braucht für die Anfrage dies hast du mit dem Async query nicht. Wie gesagt bin mir da nicht sicher da ich es so bisher nicht vewendet habe bzw. brauchte.
-
-
es nimmt zusätzliche Ressourcen für einen Wiedergabewert ein, den man auch über das "kleinere" Verfahren herauskriegen kann.
Möglicherweise, ja, das ist allerdings nicht der Sinn vom Caching und wahrscheinlich auch vernachlässigbar, sondern es geht darum, dass der Server nicht auf die Antwort des MySQL Severs warten muss.
Braucht dein MySQL Server angenommen 2 Sekunden für die Antwort auf das Query, aus welchem Grund auch immer, dann steht dein SA-MP Server so lange, bis die Antwort da ist. Das resultiert in einem merkbaren Lag. Daher sollte man, wo möglich, die Cache Funktionen in ein public auslagern. -
1. Query:
SELECT id FROM hanf;
=> mysql_function_query -> Dort eine Schleife durch die Anzahl der zurückgegebenen Rows machen und den Cache auslesen.new oldID, newID;for(new i = 0; i < rows; i++){ newID = cache_get_row_int(i, 0); if(newID > oldID + 1) { //2. Query: INSERT INTO hanf (id, etc...) VALUES (%d, etc...); break; } oldID = newID;}
Das kann man auch direkt in der Query lösen.
Hier mal ein Beispiel:
-
Das kann man auch direkt in der Query lösen.
Gute Methode, funktioniert super! Ist ein sehr geschickter Lösungsweg. Danke für den Hinweis.
Wenn man mehrere IDs gleichzeitig auslesen will, geht es auch, minimal abgewandelt:
-
Wie Frage ich ab welche Id die letzte in der Tabelle ist ?
Bei der Tabelle gehen die ID automatisch weiter