Mysql, subselect, where
holgi
- datenbank
Hi,
SELECT item.*,(
SELECT COUNT(*)
FROM item_meta AS im
WHERE im.item_id = item.item_id
) AS meta_count, (
SELECT COUNT(*)
FROM pool_item AS pi
WHERE pi.item_id = item.item_id
) AS pool_count
FROM item
WHERE item.make_user_id > 0
AND pool_count = 0
GROUP BY item.ts_make
ORDER BY item.ts_make ASC
LIMIT 0,50
Was ist daran falsch? Ich ich zähle das Vorhandensein einer Id in einer anderen Tabelle und das zwei Mal. Dann möchte ich aus der Item-Tabelle nur die haben, die in der pool_item-Tabelle auch vorhanden sind. Doch bekomme ich nur:
Unknown column 'pool_count' in 'where clause'
Wie kann ich meta_count und pool_count in einer WHERE verwenden?!
Danke
Hi,
Unknown column 'pool_count' in 'where clause'
<http://dev.mysql.com/doc/refman/5.1/en/select.html>:
"It is not allowable to refer to a column alias in a WHERE clause, because the column value might not yet be determined when the WHERE clause is executed."
> Wie kann ich meta\_count und pool\_count in einer WHERE verwenden?!
Gar nicht. Du kannst höchstens die SELECT EXPRESSION selber in der WHERE-Klausel (erneut) unterbringen.
MfG ChrisB
--
Light travels faster than sound - that's why most people appear bright until you hear them speak.
Gar nicht. Du kannst höchstens ...
Ja. Ich habe das jetzt so gelöst, dass ich in der WHERE ein Subselect habe... zwar nicht so performant, aber an der Stelle auch nicht nötig.
echo $begrüßung;
Ich habe das jetzt so gelöst, dass ich in der WHERE ein Subselect habe... zwar nicht so performant, aber an der Stelle auch nicht nötig.
Wenn du anhand berechneter Werte einschränken willst, kannst du die HAVING-Klausel nehmen. Bedenke aber, dass sie erst kurz vor Schluss die Ergebnismenge einschränkt. Wenn du mit WHERE eine große Menge bekommst und das HAVING auf wenige einschränkt, ist das nicht sehr ressourcenschonend. Wenn möglich, versuch alle Daten in der FROM-Klausel zu verbinden, dann kannst du sie auch bereits im WHERE einschränken.
echo "$verabschiedung $name";
moin,
falls du das noch ließt, dieses konstrukt:
SELECT item.*
FROM item
GROUP BY item.ts_make
;
läßt nur mysql zu, jedes andere dbms würde dir eine fehlermeldung ausgeben. und bei mysql ist es auch nur erlaubt, wenn durch die eine spalte in der gruppierung auch alle anderen spalten, die du mit ausgibst, in der jeweiligen gruppierung gleiche inhalte haben. da du aber nur eine tabelle benutzt, ist dies sehr unwahrscheinlich und somit aller wahrscheinlichkeit ein fehler, den eben mysql nur nicht anzeigt. oder aber die spalten ts_make bringt eindeutige datensätze hervor, dann ist die gruppierung unnötig.
Ilja