Autor Zpráva
mattyZEM
Profil
Dobrý den,

mám takový vtipný problém v MySQL, ohledně LIMITu. V PHP mi select funguje, v PMA nikoliv, přičemž jsou stejné.

1) PHP
SELECT * FROM forum_prispevky p LEFT JOIN uzivatele u ON (p.fpautor_id=u.uid) WHERE fptema='$tid' ORDER BY fpid LIMIT ".(($strana-1)*$max_p).", $max_p
2) PMA
SELECT * FROM forum_prispevky p LEFT JOIN uzivatele u ON (p.fpautor_id=u.uid) WHERE fptema='82' ORDER BY fpid LIMIT ".((2-1)*15).", 15

$max_p je 15, $strana je 2, $tid je 82, v PMA mi to hází chybu:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '".((2-1)*15).", 15' at line 1

Nevíte, kde je chyba? :-)

Předem dík.
Alphard
Profil
mattyZEM:
Pořád tam máte uvozovky, jak jste to vykopíroval z PHP.
Vemte jen LIMIT ((2-1)*15), 15

Tak to stejně nejde [#4] nightfish
mattyZEM
Profil
SELECT * FROM forum_prispevky p LEFT JOIN uzivatele u ON (p.fpautor_id=u.uid) WHERE fptema='82' ORDER BY fpid LIMIT ((2-1)*15), 15
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '((2-1)*15), 15' at line 1

Nebojte, zkoušel jsem… :-\


Řeším to kvůli tomuto:
SELECT fpid,fptext,fptime,fppoch,uid,ujmeno,uavatar,uvarovani,ubarva,uskupina,upodpis FROM forum_prispevky p LEFT JOIN users u ON (p.fpuid=u.uid) WHERE fptema=".$_GET['ftid']." AND fphlavni=0 ORDER BY fpid LIMIT ".(($strana-1)*$max).", $max
což je nový select z nového fóra. Blbne limit, přičemž je stejný, jako ten starý.
nightfish
Profil
v LIMITu se mohou používat pouze nezáporné celočíselné konstanty, výrazy nejsou povoleny
tedy
LIMIT 15, 15
mattyZEM
Profil
nightfish:
se mohou používat pouze nezáporné celočíselné konstanty
Beru, ale proč tedy nefunguje druhý - nový SELECT?

- starý:
SELECT * FROM forum_prispevky p LEFT JOIN uzivatele u ON (p.fpautor_id=u.uid) WHERE fptema='$tid' ORDER BY fpid LIMIT ".(($strana-1)*$max_p).", $max_p
- nový:
SELECT fpid,fptext,fptime,fppoch,uid,ujmeno,uavatar,uvarovani,ubarva,uskupina,upodpis FROM forum_prispevky p LEFT JOIN users u ON (p.fpuid=u.uid) WHERE fptema=".$_GET['ftid']." AND fphlavni=0 ORDER BY fpid LIMIT ".(($strana-1)*$max).", $max
Alphard
Profil
mattyZEM:
Beru, ale proč tedy nefunguje druhý - nový SELECT?
Vypište si, co PHP vypočítá, a hned uvidíte problém.
nightfish
Profil
mattyZEM:
Beru, ale proč tedy nefunguje druhý - nový SELECT?
Protože to máš rozbité.
mattyZEM
Profil
[#7] nightfish: Prosím?
[#6] Alphard: Vypočítá 15, tedy LIMIT 15,15
Alphard
Profil
mattyZEM:
nightfish tím chtěl říct, že jste špatně popsal problém. Co znamená "nefunguje"?
S ohledem na [#8] limit 15,15 je syntakticky správně. Nevím, co může nefungovat.
mattyZEM
Profil
Jo, pardon, já jsem zapomněl zmínit chybovou hlášku, velmi se omlouvám.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Když smažu LIMIT, funguje to správně, bohužel však takto nemohu použít stránkování.

nightfish:
Omlouvám se.
nightfish
Profil
mattyZEM:
místo mysql_query("SELECT fpid, ..."); dej echo("SELECT fpid, ..."
a poděl se s námi o to, co to vypíše
mattyZEM
Profil
SELECT fpid,fptext,fptime,fppoch,uid,ujmeno,uavatar,uvarovani,ubarva,uskupina,upodpis FROM forum_prispevky p LEFT JOIN users u ON (p.fpuid=u.uid) WHERE fptema=82 AND fphlavni=0 ORDER BY fpid LIMIT 15, 15
nightfish
Profil
Syntakticky to vypadá správně. Ještě bych možná všechny názvy sloupců a tabulek uzavřel do zpětných apostrofů...
SELECT `fpid`, `fptext`, ... FROM `forum_prispevky` `p` LEFT JOIN `users` `u` ON (`p`.`fpuid` = `u`.`uid`) WHERE ...
mattyZEM
Profil
nightfish:
Syntakticky to vypadá správně
Právě proto jsem se ptal, kde je chyba, jelikož toto jsem zkoušel již dávno.

uzavřel do zpětných apostrofů
Vyzkoušeno, také… Nejde.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: