PHP-SQL != phpmyadmin != mysql?
Peter Mairhofer
- php
Ich versteh' irgendwie nix mehr.
Vor kurzem habe ich Nested Sets eingebaut, dafür habe ich mehrere SQL Befehle per ';' getrennt:
LOCK TABLES (...); UPDATE (...); UPDATE (...); UNLOCK TABLES (...);
Das hat sowohl in mysql (Konsole) als auch in phpmyadmin funktioniert. In PHP selbst, mit mysql_query bekam ich immer einen Fehler, ausser wenn ich die einzelnen Anweisungen getrennt abgefragt habe. (aber das ist jetzt egal, die eigentliche Frage kommt jetzt):
Jetzt habe ich eine komplexe Abfrage:
SELECT t_user.userID, nachname, vorname, th_orte.ort, t_user.aktiv, adm, lag, zkw, vst, vip, fgu, wisp, bipa, gem, ver, newsl, COUNT (DISTINCT ts_user_login_i.date_login) AS immer, COUNT (DISTINCT ts_user_login_m.date_login) AS in60, COUNT (DISTINCT ts_user_login_k.date_login) AS in14 FROM t_user LEFT JOIN th_orte ON th_orte.ortID = t_user.ortID LEFT JOIN th_land ON th_land.landID = t_user.landID LEFT JOIN ts_user_login AS ts_user_login_i ON ts_user_login_i.userID = t_user.userID LEFT JOIN ts_user_login AS ts_user_login_m ON ts_user_login_m.userID = t_user.userID AND ts_user_login_m.date_login > '20031127,09:00:00' LEFT JOIN ts_user_login AS ts_user_login_k ON ts_user_login_k.userID = t_user.userID AND ts_user_login_k.date_login > '20031127,10:00:00' GROUP BY t_user.userID ORDER BY nachname LIMIT 0, 40
In phpmyadmin funktioniert das prächtig, sowohl in mysql als auch in PHP-Mysql bekomme ich diese Fehlermeldung:
ERROR 1064: You have an error in your SQL syntax near '(DISTINCT ts_user_login_i.date_login) AS immer, COUNT (DISTINCT ts_user_login_m.' at line 1
Ich versteh' gar nix mehr, diese 2 Fälle machen mich irgendwie stutzig. Ich rufe alles auf dem gleichen Server auf, sollten dann nicht alle SQL-Abfragen gleich funktionieren?
Was ist jetzt der Fehler bzw. wieso geben alle 3 Sachen (phpmyadmin, mysql & PHP-Mysql-API) andere Resultate?
Peter
abend,
Ich versteh' irgendwie nix mehr.
Vor kurzem habe ich Nested Sets eingebaut, dafür habe ich mehrere SQL Befehle per ';' getrennt:
LOCK TABLES (...); UPDATE (...); UPDATE (...); UNLOCK TABLES (...);Das hat sowohl in mysql (Konsole) als auch in phpmyadmin funktioniert. In PHP selbst, mit mysql_query bekam ich immer einen Fehler, ausser wenn ich die einzelnen Anweisungen getrennt abgefragt habe. (aber das ist jetzt egal, die eigentliche Frage kommt jetzt):
Jetzt habe ich eine komplexe Abfrage:
SELECT t_user.userID, nachname, vorname, th_orte.ort, t_user.aktiv, adm, lag, zkw, vst, vip, fgu, wisp, bipa, gem, ver, newsl, COUNT (DISTINCT ts_user_login_i.date_login) AS immer, COUNT (DISTINCT ts_user_login_m.date_login) AS in60, COUNT (DISTINCT ts_user_login_k.date_login) AS in14 FROM t_user LEFT JOIN th_orte ON th_orte.ortID = t_user.ortID LEFT JOIN th_land ON th_land.landID = t_user.landID LEFT JOIN ts_user_login AS ts_user_login_i ON ts_user_login_i.userID = t_user.userID LEFT JOIN ts_user_login AS ts_user_login_m ON ts_user_login_m.userID = t_user.userID AND ts_user_login_m.date_login > '20031127,09:00:00' LEFT JOIN ts_user_login AS ts_user_login_k ON ts_user_login_k.userID = t_user.userID AND ts_user_login_k.date_login > '20031127,10:00:00' GROUP BY t_user.userID ORDER BY nachname LIMIT 0, 40
ist das letzte (AND ts_user_login_k.date_login > '20031127,10:00:00') nicht
eigentlich als WHERE-statement gedacht ?
mfg,
(tanz das)
Z.N.S.
Hello,
common-Anweisungen werden von MySQL noch nicht unterstützt und die Frontends emulieren diese daher. Mit PHP bist Du aber direkt IN der API. Da musst du das dann selber emulieren, indem Du die Anweisungen nacheinander aufrufst.
Grüße
Tom