Ik wil de inhoud van een tabel laten zien, gesorteerd volgens een wat ingewikkelde methode.
Het is een tabel met namen en foto's.
Alle namen hebben een verschillende naam en de foto's ook.
Nu wil ik het volgende:
1. Ik wil alle rijen laten zien uit de tabel
2. Nu moeten bovenaan alle rijen komen die wel een foto hebben
3. Daarna moeten alle namen komen die geen foto hebben.
Nu is dit geen rocketscience, maar het gaat hierom.
Alle rijen die een foto bevatten moeten random getoond worden en daaronder komen de rijen zonder foto ook random...
Wie kan me daarin helpen?
Ik heb het nu zo:
SELECT ID, naam, foto ORDER BY foto DESC, RAND();
Nu doet ie dit:
Bovenaan komen alle foto's, daaronder komen random de rijen zonder foto.
Ik mis dus alleen dat ie de foto's bovenaan niet random neerzet...
Je kunt niet én op kolomnaam én random sorteren. Zodra je random gaat sorteren is er geen sortering meer: gooi de zooi maar door elkaar.
SELECT
kolom1,
kolom2,
foto
FROM
tabelnaam
ORDER BY
foto DESC,
kolom1 ASC
Dit is slechts een voorbeeldje.
Ik krijg echter de indruk dat jij 2x op de naam wilt sorteren, 1x met foto en 1x zonder foto. Dan heb je 2 queries nodig of je moet met een subquery aan de slag.
Was even een typfoutje. Ik had het inderdaad zoals jij had staan.
Maar ik bedoel hetgeen wat Jan heeft gepost.
Jan,
Zoiets zou het inderdaad moeten zijn.
Alleen ik heb het nu toegepast, maar werkt het nog niet. Hij sorteert nu wel eerst alle foto's en dan degene zonder foto, maar hij sorteert ze op ID aflopend.
Waarschijnlijk werkt de ORDER BY niet binnen de () klopt dat?
Als ik m er namelijk buiten zet, dan zet ie alles wel random neer (maar dus ook weer de foto's tussen de niet foto's)
Oh, dat zou kunnen, dat die RAND() niet goed werkt binnen de haakjes in een UNION. Tja, dan is de enige oplossing:
1) eerst de records met foto's ophalen, die in een array proppen en dan de array door elkaar husselen met [php]shuffle[/php]
2) hetzelfde doen voor de records zonder foto's
Als ik het dus met 2 verschillende queries ga doen, heb ik alleen een volgend probleem... ;-(
Ik laat namelijk 5 resultaten per pagina zien. Dit doe ik dmv LIMIT in de query.
Hoe kan ik dit nu verwerken als ik met arrays ga werken?
Dit is de code namelijk:
(
SELECT ID, naam, foto
WHERE foto != ''
ORDER BY RAND()
)
UNION
(
SELECT ID, naam, foto
WHERE foto = ''
ORDER BY RAND()
)
LIMIT ".$offset.",".$items_per_pagina
en
$offset = $huidige_pagina * $items_per_pagina;
Dan zou ik van de twee arrays 1 array maken (met foto eerst) en die in een sessie stoppen. Hou in je sessie ook een waarde bij zodat je weet met welk arrayelement je moet beginnen.
Bedankt weer voor je supersnelle reactie.
Dit gaat alleen even m'n pet te boven.
Ik zou even niet weten hoe ik dat moet maken.
Als je me daarin zou kunnen helpen zou dat top zijn.
zo niet, dan leg ik het even naast me neer en dan kijk ik er later weer even naar.