Autor | Zpráva | ||
---|---|---|---|
svanda777 Profil |
#1 · Zasláno: 19. 4. 2012, 21:00:21
Dobrý den,
jsem poměrně začátečník a chtěl bych se zeptat jestli nevíte jak opravit následující chybu: 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 'id #9 LIMIT 0, 30' at line 1 Pro ochotné přikládám kód: <h1>Procházet</h1> <table border="1"> <tr> <th>Předmět</th> <th>Látka</th> </tr> <? include "casti/texty/connect.php"; $id="1" ; $max_id=mysql_query("SELECT MAX(id) FROM `soubory`") or die(mysql_error()) ; while ($id=$max_id){ $predmet=mysql_query("SELECT `predmet` FROM `soubory` WHERE `id` = $id LIMIT 0, 30 ") or die(mysql_error()); $latka=mysql_query("SELECT `latka` FROM `soubory` WHERE `id` = $id LIMIT 0, 30 ") or die(mysql_error()); if ($predmet!=""){ echo " <tr> <td>$predmet</td> <td>$latka</td> </tr> " ;} $id+=1 ; } ?> </table> |
||
Sir Tom Profil |
svanda777:
Také dobrý den - máš chybu v syntaxi (někde kolem LIMIT). Co obsahuje $id? A co vypíše toto: echo "SELECT `predmet` FROM `soubory` WHERE `id` = $id LIMIT 0, 30"; Pozor - nejdřív deklaruješ $id jako řetězec ( $id="1" ), ale vsadil bych se, že id v databázi je číslo. A pak s tímto řetězcem provedeš $id+=1; . Provede se tedy, že $id = $id + 1 => $id = "1"+1 => $id = 11; (K řetezci se přidá znak.)
|
||
svanda777 Profil |
Sir Tom:
„Co obsahuje $id?“ V tabulce mám záznamy očíslovány id > A co vypíše toto: > echo "SELECT `predmet` FROM `soubory` WHERE `id` = $id LIMIT 0, 30"; to by mělo vypsat z tabulky soubory v záznamu s ID rovno $id kolonku predmet „A proč ve while($id=$max_id) je jenom jedno rovnítko?“ Toho jsem ji nevšiml Děkuji, že jste ochoten pomoct |
||
Sir Tom Profil |
#4 · Zasláno: 19. 4. 2012, 21:23:16
svanda777:
Nezajímá mě popis toho, co $id "asi" obsahuje, ale jednu konkrétní hodnotu. Je to číslo? (9) Nebo je to řetězec? ("9"). Použij můj echo příkaz do projektu a pak jenom zkopíruj sem, co to echo vypíše. BTW - Když se dívám na ten tvůj kód, tak by to šlo řešit více efektivněji a mám pocit, že databáze je chybně navržená. Nejdřív se zeptáš tabulky na nejvyšší id. Pokud je id unikátní, tak by mělo být v té tabulce pouze jedenkrát. Proč tedy tak šílená konstrukce se několika selecty a limity později? Není vhodnější např.: "SELECT predmet, latka FROM soubory WHERE id = (SELECT MAX(id) FROM soubory)"; ?
Nebo to id není unikátní? |
||
Tori Profil |
#5 · Zasláno: 19. 4. 2012, 21:43:56
Sir Tom:
„Provede se tedy, že $id = $id + 1 => $id = "1"+1 => $id = 11; (K řetezci se přidá znak.)“ Ne, to si pletete s JavaScriptem. Výsledkem "1"+1 je v PHP celé číslo 2. http://cz.php.net/manual/en/language.types.string.php#language.types.string.conversion svanda777: Funkce mysql_query vrací odkaz na popisovač výsledků. Při přetypování na řetězec (když ho vkládáte do dalšího SQL dotazu) se převede na "Resource #[číslo]" nebo "#[číslo]". Data získáte např. funkcí mysql_fetch_assoc nebo mysql_result. Zajímalo by mne: Co je smyslem toho cyklu - chcete jen vypisovat předmět a látku k nejvyšším 30 id? Může k jednomu id být více řádků? |
||
Sir Tom Profil |
#6 · Zasláno: 19. 4. 2012, 21:49:43
Tori:
„Ne, to si pletete s JavaScriptem.“ Aha, pak ano. Děkuji za upozornění. Jsem zvyklý používat konvence, tj. řetězec v uvozovkách, číslo bez nich. |
||
svanda777 Profil |
#7 · Zasláno: 19. 4. 2012, 21:52:11
Jak jsem již psal jsem v SQL začátečník a proto je kód tak krkolomný. Ke každému id je pouze jeden řádek, ale ne každé id v databazi je, protoze používám automatické číslování a občas záznamy mažu. Byl bych vám nesmírně zavázán kdybyste byli tak laskaví a napsali mi konkrétní kód. Cílem je vypsat že všech záznamů v databazi predmet a latku. A tyto data dát do tabulky
|
||
Tori Profil |
svanda777:
Tak potom stačí jen seřadit záznamy podle id sestupně a z výsledku vybrat max. 30 řádků: SELECT `predmet`, `latka` FROM `soubory` ORDER BY `id` DESC LIMIT 0, 30 |
||
svanda777 Profil |
#9 · Zasláno: 19. 4. 2012, 22:04:30
A jak to mám umístit do té tabulky?
|
||
Sir Tom Profil |
svanda777:
$Toriin_kod = "SELECT `predmet`, `latka` FROM `soubory` ORDER BY `id` DESC LIMIT 0, 30"; $result = mysql_query($Toriin_kod) or die(mysql_error()); //Vytvoříme výsledek MySQL dotazu echo "<table>"; while(list($predmet, $latka) = mysql_fetch_array($result)){ //Tento výsledek zpracujeme - tento kód bude z výsledku dotazů brát jednotlivé řádky - a tento řádek opět zpracuje. V tomto případě řádek "rozkouskuje" do proměnných, se kterými se dále pracuje. echo "<tr>"; echo "<td>".$predmet."</td>"; echo "<td>".$latka."</td>"; echo "</tr>"; } echo "</table>"; |
||
Časová prodleva: 12 let
|
0