Sorteren op verschillende kolommen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom Hes

Tom Hes

19/03/2007 21:56:00
Quote Anchor link
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...

zucht...
 
PHP hulp

PHP hulp

17/11/2024 00:49:32
 
Frank -

Frank -

19/03/2007 22:02:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
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.
 
Jan Koehoorn

Jan Koehoorn

19/03/2007 22:03:00
Quote Anchor link
(
SELECT ID, naam, foto
WHERE foto != ''
ORDER BY RAND()
)
UNION
(
SELECT ID, naam, foto
WHERE foto = ''
ORDER BY RAND()
)
 
Tom Hes

Tom Hes

20/03/2007 09:45:00
Quote Anchor link
Frank,

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)
 
Jan Koehoorn

Jan Koehoorn

20/03/2007 09:49:00
Quote Anchor link
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 shuffle
2) hetzelfde doen voor de records zonder foto's
 
Tom Hes

Tom Hes

20/03/2007 10:07:00
Quote Anchor link
ja daar was ik dus al bang voor.

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(
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;
 
Jan Koehoorn

Jan Koehoorn

20/03/2007 10:09:00
Quote Anchor link
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.
 
Tom Hes

Tom Hes

20/03/2007 10:16:00
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.