optimierungsansatz gesucht (mysql-abrage/verarbeitung)

Chaosengel_Gabriel

Erfahrenes Mitglied
hey leute.
ich habe 2 situationen in denen ich alle datensätze in einer bestimmten spalte einer tabelle auslese und anschließend mittels implode als string weiterverwende...
momentan hab ich das ganze mit diesem snippet gelöst:
PHP:
$r=mysql_query("SELECT alliance_name FROM realm".REALM_ID."_player GROUP BY alliance_name ORDER BY LOWER(alliance_name) ASC");
while ($d=mysql_fetch_assoc($r)) {
    if ($d['alliance_name']!='') {
        $alliance_list[]=$d['alliance_name'];
    }
}

kann ich das nicht auch einfacher machen?
oder wäre es sogar sinniger mit diesem konstrukt direkt den gewünschten string zu erzeugen?
in der tabelle stecken locker mehrere tausend datensätze und genutzt werden soll das in nem per ajax geladenem content, daher sollte die verarbeitung und darstellung nicht zuviel zeit in anspruch nehmen :)

ich hoffe ihr habt da nen paar ideen für mich, auf die ich noch nich gekommen bin ^^
 
ich schieb die mysql umstellung immer auf *___* hab momentan noch zuviele andere baustellen und allzu aufwändig sollte das mitm mysql auf mysqli umstellen nich sein ^^

die idee gefällt mir, damit lässt sich die prüfung in der php schleife umgehen :D

ne möglichkeit die schleife selbst zu umgehen im query oder so vllt?!

ich nutze die daten später, um damit ne datenwert-tabelle für nen javascript zu erzeugen:
Javascript:
 var availableAllianceTags = [<?php echo '"'.implode(/'", "/',$alliance_list).'"'; ?>];
(ohne die / natürlich, aba sonst würden die ' nicht angezeigt hier)
 
ich nutze die daten später, um damit ne datenwert-tabelle für nen javascript zu erzeugen:
Nutze bitte json_encode für solche Aufgaben!
PHP:
var availableAllianceTags = <?php echo json_encode($alliance_lsit); ?>
Nicht so fehleranfällig und viel sauberer!

Mit MySQLi könntest du mysqli_fetch_all() nutzen und hättest alle Datensätze in einem Array.
Mit MySQL hast du keine andere Wahl als eine Schleife. Allerdings macht mysqli_fetch_all nichts anderes, wenn man einen Blick unter die Haube wirft: https://github.com/php/php-src/blob...182b/ext/mysqlnd/mysqlnd_result.c#L1774-L1807
 
alles klar, mach ich :)
war mir nicht geläufig, dass mans auch so machen kann, weil ich bisher nur wenig mit js gearbeitet hatte ^^

ich werds mitm mysqli_fetch_all später mal probiern.
das umstellen auf ne kleine, praktische mysqli klasse die ich gefunden hatte, werd ich dann wohl doch lieber etwas höher auf die liste setzen :D

ich fürchte allerdings, dass ich um die schleife nich drumherum kommen werde, um die daten wie benötigt anzuordnen...
vllt wäre es dann auch praktischer/schneller den inhalt der js-variablen direkt in der schleife zu schreiben (als string) und im js selbst dann nur die variable auszugeben...
naja seh ich gleich, wenn frau und kind versorgt sind, dass ich in ruhe weiter machen kann :D
 
das umstellen auf ne kleine, praktische mysqli klasse die ich gefunden hatte, werd ich dann wohl doch lieber etwas höher auf die liste setzen :D
Ich hoffe sehr, dass diese auch Prepared Statements unterstützt ;)

vllt wäre es dann auch praktischer/schneller den inhalt der js-variablen direkt in der schleife zu schreiben (als string) und im js selbst dann nur die variable auszugeben...
Erst einmal musst du überprüfen, ob dieser Aspekt deiner Applikation überhaupt ausschlaggebend für deine Performanceprobleme ist.
Warum möchtest du tausende Datensätze ausgeben, wenn du höchstwahrscheinlich auf deiner Website sowieso nur die ersten 50 auf einen Schlag anzeigen kannst. Mit 'Pagination'/Aufteilung der Daten auf mehrere Seiten hast du dann auch kein Problem mit den riesen Datenmengen mehr.
 
die js-var ist für nen auto-completer, davon sind zwei in diesem inhalt ^^
daher kommen die performanz probs an dieser stelle...
is nur nen kleiner content, der per ajax geladen wird, daher wollte ich aufs ajax im auto-completer verzichten...
aufruf dauerte ursprünglich 3-5sec...
nachdem ich aufs implode gewechselt hatte, hab ichs schon auf 2-3sec reduziert gehabt ^^
kürzer wie eine sec is unnötig, denn eine sekunde halte ich für akzeptabel ^^

ich versuch das meiste mittels ajax zu steuern, um immer nur kurze berechnungs prozesse auf dem server ausführen zu müssen und so andere hintergrund operationen auch kontrollierter nutzen kann
 
oder... sollte ich überhaupt ne klasse für db nutzen?!
ich arbeite alleine am projekt und debugge eigentlich immer gründlich...
zumal durch die routinen in der klasse doch auch wieder mehr arbeit verursacht wird oder nicht?!

grade die prepared statement geschichte hab ich als äußerst praktisch im hinterkopf ^^
is bloß lange her, dass ich darüber gelesen habe, war immer zu faul zum wechseln, weil iwie scho seit 5 jahren heißt die mysql extension wird abgeschaltet ^^
 
Sorry, das zu so sagen, aber gerade wegen Leuten wie dir existiert die Extension noch :rolleyes:
Wenn es niemanden geben würde, der einfach nicht umstellen will, wäre sie schon längst ganz weg,

Und wegen "gründlich debuggen": Sind dir die Fehlermeldungen aufgefallen? :p

...zu den Klassen: Hängt ganz von deinem Fall ab. Ein Wrapper für MySQLi, der die
vorhandenen Methoden nur unter anderem Namen anbietet, ist sicher sinnlos.
 
ne stimmt wäre sinnlos, da ich atm plain mysql funktionen im php code stehen hab ^^
ich würde dann ja grundsätzlich erstmal auf klasse umstellen, hatte da eine gefunden, die zahlreiche dbs unterstützen könnte ^^ wobei das aber wida sinnfrei is, da dieses projekt ausschließlich für den localen xampp betrieb ist ^^ deswegen möchte ich die arbeitsaktivitäten auch so minimal wie möglich halten, um das host system in keiner form zu beeinflussen, auch wenn dann doch mehrere dieses projekt nutzen sollten ^^

nein, ich hatte tatsächlich noch mit keinem server zu tun, der mir ne deprecated meldung geliefert hat, wobei ich aber hauptsächlich local an nem xampp entwickle ^^

ich entschuldige aber ganz herzliche eine bremse der technik zu sein und gelobe baldige besserung :D
bin zwar lernfähig, aber inzwischen auch schon alt, aus der zeit des 16std scriptens binsch scho raus ^^
 
Zurück