2012-03-29 17 views
0

Können Sie Variablen in Unterabfragen übergeben, so?SQL-Unterabfrage, Übergabe einer Variablen

SELECT users.id AS id, 
(SELECT SUM(total) FROM (image_totals) WHERE `cat_id` IN ('5', '3') AND `user_id` =id) AS image_count 

Dies ist nur ein Teil einer größeren Abfrage, die alle durch Active Record generiert wird, aber die entscheidende Frage bleibt, die ‚id‘ Variable, wie kann ich das in meine Unterabfrage übergeben? Betrachte ich das alles falsch?

Vielen Dank im Voraus. Und lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Antwort

1

Verwenden Sie GROUP BY. Sie möchten SUM (total) für jede user.id für bestimmte Werte von cat_id. Ich weiß nicht, was der Rest der Abfrage aussieht, aber für das, was gezeigt wurde, kann man einfach:

SELECT 
     users.id AS id, 
     SUM(total) 
FROM image_totals 
WHERE cat_id IN ('5', '3') 
GROUP BY users.id 
1

Nein, das ist unmöglich, es muss anders umgesetzt werden.

Auswahl muss aus einem konsistenten Datensatz ausgewählt werden.

Ihr Datensatz kann komplexe Abfragen enthalten.

+0

Danke für die Antwort. Das habe ich mir auch gedacht. Was wäre der richtige Weg, um das zu erreichen? Mit einem JOIN? –

3

Wenn ich Ihre Frage richtig verstanden habe, dann ja Sie können.

Wenn die Tabellen nicht die gleichen Spalten enthalten, benötigen Sie nicht den Tabellennamen für jede Spalte. Ich ziehe es vor, den Tabellennamen einzubeziehen, da er leichter zu verstehen ist.

SELECT users.id AS id , 
     (SELECT SUM(image_totals.total) 
     FROM image_totals 
     WHERE image_totals.cat_id IN ('5', '3') AND 
       image_totals.user_id = users.id) AS image_count 
FROM users 

Sie können auch den Alias ​​'für Tabellen verwenden, um die Eingabe etwas einfacher zu machen. u = Benutzer und i = image_totals.

SELECT u.id AS id , 
     (SELECT SUM(i.total) 
     FROM image_totals AS i 
     WHERE i.cat_id IN ('5', '3') AND 
       i.user_id = u.id) AS image_count 
FROM users AS u 
Verwandte Themen