Autor Zpráva
svanda777
Profil
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";
A proč ve while($id=$max_id) je jenom jedno rovnítko?

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
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
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
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
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
Koukněte se do manuálu k mysql_fetch_assoc na příklady, je to jednoduché.
svanda777
Profil
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>";

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: