Autor Zpráva
SteveO
Profil *
Zdravím, chci vypsat 5 nejnovějších článků seřazených podle data, přičemž úplnou přednost mají mít ty, které jsou přiřazeny k aktuální sekci.
Teď mi to vrátí nejdříve všechny články, které jsou přiřazeny k nějaké sekci (mají hodnotu v tabulce "sekce").
Díky moc.

SELECT c.* FROM clanky c
LEFT JOIN clanek_to_sekce c2s ON c.clanek_id = c2s.clanek_id
ORDER BY c2s.sekce_id = '".(int)$aktualni_sekce."' DESC, c.datum DESC
LIMIT 5
Alphard
Profil
A co je špatně?
Jen tipuji, že možná chcete 5 nejnovějších celkově a pak dát nahory ty ze sekce. V tom případě použijte poddotaz, prvně vybrat 5 nejnovějších a pak seřadit podle sekce.
SteveO
Profil *
Nene, chci nejdřív ty ze sekce (to DESC je tam správně) a pak všechny nejnovější nezávisle na sekci.
Špatně je nyní to, že když přiřadím článek do nějaké sekce, zobrazuje se na prvním místě ve všech sekcích.

Zatím jsem to vyřešil odstraněním LEFT JOIN a úpravou na:
... ORDER BY (SELECT IFNULL(cs2.sekce_id, 0) FROM clanek_to_sekce c2s WHERE c2s.clanek_id = c.clanek_id AND c2s.sekce_id = '".(int)$aktualni_sekce."') DESC, ...

Takhle to funguje, ale přísahal bych, že tu verzi s LEFT JOIN už jsem taky dřív použil a fungovala... :)
Kajman
Profil
SELECT c.* FROM clanky c
LEFT JOIN clanek_to_sekce c2s ON c.clanek_id = c2s.clanek_id AND c2s.sekce_id = '".(int)$aktualni_sekce."'
ORDER BY (c2s.clanek_id is null), c.datum DESC
LIMIT 5

Možná by v tom prvním pokusu stačilo i <=> místo rovnítka, aby to ošetřilo null hodnoty, ale stejný článek by tam mohl být vícekrát.

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:

0