Ich habe zwei Tabellen: items
und items_meta
. In einer Abfrage möchte ich alle Elemente aus der Items-Tabelle auswählen, die bestimmten Bedingungen entsprechen.Abrufen von Unterspalten (ID) aus einer SELECT QUERY für die Verwendung in einer anderen Abfrage
SELECT id,name,price description FROM items
WHERE {some conditions are true};
Ich möchte auch alle Zeilen in der items_meta auszuwählen, die die id
der Elemente in der ersten Abfrage entsprechen. Dies wird für einen anderen Zweck verwendet, der nicht direkt mit der ersten Abfrage zusammenhängt.
SELECT meta_name, meta_value,COUNT(*) FROM items_meta
WHERE item_id IN ({the ids from the previous query})
GROUP BY meta_name, meta_value;
Meine aktuelle Implementierung ist durch die ersten Ergebnisse in einer Schleife mit PHP und eine Liste der id
erstellen in der zweiten Abfrage verwendet werden.
foreach ($items as $item){
$items_id[] = $item["id"];
}
$IDs = implode(",", $items_id);
Ich denke, es sollte eine SQL-Ansatz besser als das sein.
Diese Lösung ist, was ich eigentlich zuerst dachte. Die einzige Herausforderung besteht darin, dass die erste Abfrage tatsächlich eine vereinfachte Form einer komplexen Abfrage ist, die mehrere Tabellen verbindet, um das Ergebnis zu erzeugen. Das Wiederholen dieser Joins in der zweiten Abfrage macht es tatsächlich komplexer und rechenintensiver. – elSama
Ich dachte auch über die Erstellung einer temporären Tabelle mit der ersten Abfrage, dann verwenden Sie Ihren Ansatz. Der Grund, warum ich diese Idee ablehnte, war, dass sie zusätzliche Komplexität mit sich brachte. Ich musste die Daten in die temporäre Tabelle einfügen und dann alle Ergebnisse wieder als meine erste Ausgabe auswählen. Ich würde mich freuen, wenn es eine Möglichkeit gibt, die Daten einzufügen und sie auch zurückzugeben – elSama