Unterabfrage in PHP
Lasst uns ein einfaches Beispiel mit zwei Tabellen:
USERS (Id, Name, City)
PLAYERS (Id_Player, Number, Team)
Und ich habe eine Abfrage mit einer untergeordneten select-Anweisung in einer Schleife, wo der untergeordneten select-Anweisung ist immer das gleiche, so möchte ich teilen es in zwei Abfragen und setzen der untergeordneten select-Anweisung außerhalb der Schleife.
Ich erkläre. , Was funktioniert, aber es ist nicht zu optimieren:
for($i=0;$i<something;$i++)
{
$res2=mysql_query("SELECT Team from PLAYERS WHERE Number=$i
AND Id_Player IN (SELECT Id FROM USERS WHERE City='London')");
}
, Was ich gerne tun würde, aber es funktioniert nicht:
$res1=mysql_query("SELECT Id from USERS where City='London'");
for($i=0;$i<something;$i++)
{
$res2=mysql_query("SELECT Team from PLAYERS WHERE Number=$i
AND Id_Player IN **$res1**");
}
Dank!
Warum würden Sie wollen, um zwei Abfragen statt einer? Eine Abfrage mit einer untergeordneten select-Anweisung wäre dann schneller zwei eigenständige ist. Auch, können Sie sagen, uswhat Fehler sind Sie immer?
InformationsquelleAutor Arturo | 2011-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas wie dies funktionieren sollte.
InformationsquelleAutor Ollie
Sie SQL-Lagen in Schleifen kann sehr langsam sein und nehmen eine Menge von Ressourcen, haben Sie einen Blick auf JOIN in Sie SQL. Es ist nicht so schwierig und wenn man einmal den Dreh raus können Sie, einige schreiben wirklich schnell leistungsfähige SQL.
Hier ist ein gutes tutorial lohnt sich einen Blick auf über die verschiedenen Arten von Verknüpfungen:
http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.php
JOIN
; geloopt Abfragen kann schrecklich sein, manchmal.InformationsquelleAutor Owen
SELECT PLAYERS.*, USERS.City FROM PLAYERS, USERS WHERE USERS.City='London' AND PLAYERS.Number = $i
Nicht der beste Weg, es zu tun; vielleicht eine
LEFT JOIN
, aber es sollte funktionieren. Vielleicht haben die syntax falsch.James
BEARBEITEN
WARNUNG: Dies ist nicht die ideale Lösung. Bitte geben Sie mir eine genauere Abfrage und ich kann Sortieren, eine
join
Abfrage für Sie.Nehmen Sie Ihren Kommentar in Betracht, lassen Sie uns einen Blick auf ein anderes Beispiel. Dies wird mit PHP zu machen eine Liste, wir können mit dem MySQL -
IN
Stichwort.Erstes-Abfrage:
$res1 = mysql_query("SELECT Id from USERS where City='London'");
Dann eine Schleife durch die Abfrage aus und legen Sie jeden
Id
Feld eins nach dem anderen in eine Komma getrennte Liste:Sollten Sie haben nun eine Liste von IDs wie diese:
12, 14, 6, 4, 3, 15, ...
Nun steckte es in Ihre zweite Abfrage:
Beispiel werden hier verbessert werden kann, die für es bestimmten Zweck, aber ich versuche, es so offen wie möglich.
Wenn Sie möchten, machen Sie eine Liste von Zeichenfolgen, nicht IDs oder eine andere Nummer, ändern Sie die erste
while
Schleife einbauen der Linie innerhalb es mit$player_ids .= "'" . $row['Id'] . "',";
Wenn könnten Sie mir Ihrer tatsächliche Abfrage, die Sie verwenden, die ich kann kommen mit etwas besser; wie ich oben sagte, dies ist eine allgemeinere Weise, Dinge zu tun, die nicht unbedingt die besten.
InformationsquelleAutor Bojangles
Ausführen der Abfrage in einer Schleife ist keine gute Idee. Viel besser wäre die ganze Tabelle, und dann Durchlaufen Sie die Tabelle in der Schleife.
Also Abfrage würde etwa so lauten:
InformationsquelleAutor mlusiak
Funktionieren würde, aber
mysql_query()
gibt ein ERGEBNIS zurück GRIFF. Es nicht zurückid
Wert. Jede select-Abfrage, egal wie viele, oder wenige Zeilen es gibt, gibt Anweisung, nicht einen Wert. Sie müssen zuerst Holen Sie die Zeile mit einer dermysql_fetch...()
fordert, die gibt, die Reihe, aus denen Sie dann extrahieren Sie den id-Wert. so...InformationsquelleAutor Marc B