Autor Zpráva
quatzael
Profil
Mám zhruba nějakej takovej dotaz do databáze:

 SELECT *
 FROM contracts
 JOIN orders
 ON contracts.order_id = orders.order_id
 WHERE contracts.user_id = 12 AND contracts.status = 'on' ORDER BY contracts.datum DESC LIMIT 10 , 20;

Problém je, že nějak to úplně ignoruje to první číslo za LIMIT Předpokládal bych, že to seřadí výsledky sestupně podle data a vybere 20 řádků počínaje desátým. Ale mě to pořád vyhazuje výsledky od prvního řádku. Ta dvacítka jinak funguje (zobrazí se jen 20 záznamů).

Mám za to, že to nějak asi způsobuje ten JOIN, ale nevím co s tím..
Kajman
Profil
quatzael:
vybere 20 řádků počínaje desátým

Počínaje jedenáctým (deset přeskočí). Myslím, že to jen špatně kontrolujete. Zkuste si např. nějaká jiná (vyšší) čísla, asi dojdete k tomu, že je problém jinde - třeba v nejednoznačném řazení při rovnosti datumů.
quatzael
Profil
Kajman:
Právě, že jsem zkoušel různý čísla, kontroluju řádky podle id, a ať tam měním čísla jakkoli, vždycky to začne záznamem s id 543.
Kajman
Profil
Můžete připravit ukázku nefunkčnosti např. na http://sqlfiddle.com/ ?
quatzael
Profil
Kajman:
Jestli jste si tím naprosto jistý, že je sql syntax správnej, tak asi nemá smysl vytvářet ukázku..

Zkoušel jsem zadat ten SQL dotaz přímo v phpMyAdmin a tam se to chová zase úplně jinak.
Nastavil jsem LIMIT 0, 200. Prvních asi 10 řádků je snad ok (ale vypadá, že úplně jiné než mi to vyhazovalo přímo na stránce) a zbytek představuje asi 60 naprosto totožných řádků (včetně id - primárního klíče) pak dalších asi 60 totožných řádků (id+1) a do třetice to samý (id+2)..

To je přece nesmysl. jak mi to může vyhodit záznamy několikrát opakovaně ty samé. Navíc ani jeden z nich nemá id 543, kterým začínal kterýkoli výpis na stránce.
quatzael
Profil
Ještě abych upřesnil o co se snažím. Potřebuju získat všechny řádky z tabulky orders, u kterých se shodují sloupce order_id se sloupci se stejným názvem z tabulky contracts, u kterých platí výše uvedené podmínky týkající se sloupců z tabulky contracts.

Nebo jinak řečeno: vytřídit z tabulky contracts řádky, které odpovídají uvedeným podmínkám. Z nich získat hodnoty ze sloupce order_id a podle těchto hodnot vyhledat řádky z tabulky orders s odpovídajícími hodnotami order_id
quatzael
Profil
Tak asi to vypadá, že největší problém způsobuje potom výpis v PHP pomocí cyklu while, dokonce ani ten počet řádků není ok. Zadám za limit počet řádků 2 a zobrazí se 6.

Mám tam:
 while ($row = mysqli_fetch_assoc($sql_result))
Kajman
Profil
quatzael:

Ano, problém bude jinde než v limitu. Ukažte celý while cyklus plus pár řádku předtím s přípravou dotazu.
quatzael
Profil
Kajman:
Už jsem na to přišel. Měl jsem v tom cyklu while generovanej výpis přes $text = $text . "nový text"; a protože jsem zapomněl tu proměnnou mazat a běželo to už jako třetí cyklus, tak tam pořád zůstával ty výpisy z předchozích cyklů while. Teď se už zdá, že to funguje..

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: