[sql] Order by + join

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jasper DS

Jasper DS

14/05/2011 15:00:46
Quote Anchor link
Beste,

ik heb nu deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT s.id, s.onderwerp, s.status
FROM support s
INNER JOIN support_tickets AS t
ON t.id_support = s.id
WHERE s.id_leden = ".mysql_real_escape_string($_SESSION['user_id'])."
ORDER BY t.datum DESC


Ik wil dus de support berichten sorteren op laatste reactie. Hiervoor kijk ik naar de datum in de tabel support_tickets.

Nu is er iets heel vreemds.

Ik heb 2 support berichten (1 en 2)
support 1 heeft 2 reacties (1 en 3)
support 2 heeft 2 reacties (2)

Nu weergeeft mijn script de code zo:

support 1 (van reactie 3) -> nieuwste reactie
support 2 -> tussen reactie
support 1 (van reactie 1) -> oudste reactie

Hoe los ik dit op?
 
PHP hulp

PHP hulp

12/04/2024 23:57:13
 
Micha van Eijk

Micha van Eijk

14/05/2011 16:14:58
Quote Anchor link
In principe werkt het goed toch, maar wil je alleen de dubbele er uit?
Dat kan via DISTINCT. Met DISTINCT selecteert hij alleen unieke ID's, dus in dit geval alleen unieke support id's.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT DISTINCT s.id, s.onderwerp, s.status
FROM support s
INNER JOIN support_tickets AS t
ON t.id_support = s.id
WHERE s.id_leden = ".mysql_real_escape_string($_SESSION['user_id'])."
ORDER BY t.datum DESC
 
Jasper DS

Jasper DS

14/05/2011 16:26:42
Quote Anchor link
neen, dat werkt niet.. Dit staat er dan:

support 2 -> deze staat eerst
support 1 -> deze moet eerst staan want die heeft de laatste reactie

edit, ik denk dat ik weet hoe het komt, er word bij support namelijk gekeken naar de 1ste reactie. Maar ik moet de laatste reactie hebben, hoe doe ik dat?
Gewijzigd op 14/05/2011 17:13:38 door Jasper DS
 
Ben Van de Voorde

Ben Van de Voorde

14/05/2011 17:51:21
Quote Anchor link
ASC
Gewijzigd op 14/05/2011 17:52:32 door Ben Van de Voorde
 
Jasper DS

Jasper DS

14/05/2011 18:13:47
Quote Anchor link
Bart Wout op 14/05/2011 17:51:21:
ASC


nee, werkt niet.

3 support berichten
support 1
support 2
support 3

4 reacties
reactie 1 (1)
reactie 2 (2)
reactie 3 (1)
reactie 4 (3)

dan zou het zo moeten weergeven worden van nieuw naar oud
support 3 want reactie 4 is het nieuwste
support 1 want dan komt reactie 3
support 2 en dan komt reactie 2

Volgens mij gebruiken ze hier op het forum ook zo'n query, namelijk om de topics met de laatste reactie eerst te weergeven.
Gewijzigd op 14/05/2011 18:14:37 door Jasper DS
 
Simon ploegh

simon ploegh

14/05/2011 19:34:03
Quote Anchor link
Volgens mij ontstaat het probleem in de where.

Zou je de where niet eerder uit reactie bericht halen?
Nu haalt die de waarde op als er een suport bericht met het zelfde bericht van gebruiker. maar wat nu als ik alleen maar een reactie plaats. Dan kan die hem dus nooit op halen. Lijkt mij dus de fout in de where te zitten
 
Jasper DS

Jasper DS

14/05/2011 19:43:59
Quote Anchor link
Hoe verander ik die where dan? Ik moet nog op de één of andere manier kunnen kijken welk support bericht bij welke persoon hoort?
 
Simon ploegh

simon ploegh

14/05/2011 20:26:38
Quote Anchor link
ja oke. je moet nog een inner join in bouwen om hem te verbinden met je leden tabel.
dan kun je de where uit je leden tabel halen.

http://www.phphulp.nl/php/tutorial/overig/sql-joins-uitgebreid/479/meer-dan-2-tabellen/1118/

zo heb ik het mijn laatste keer opglost
Gewijzigd op 14/05/2011 20:28:19 door simon ploegh
 
Jasper DS

Jasper DS

14/05/2011 23:17:16
Quote Anchor link
neen? waarom zou ik dat doen?
 
Jasper DS

Jasper DS

16/05/2011 17:09:20
Quote Anchor link
Bumpje

Ik wil dus sorteren op de laatste reactie.
Gewijzigd op 16/05/2011 17:13:18 door Jasper DS
 
Joren de Wit

Joren de Wit

16/05/2011 17:19:57
Quote Anchor link
Ik zie de fout zo snel niet maar daar kun je zelf vrij eenvoudig achter komen. Bouw je query eens opnieuw vanaf het begin op, waarbij je bent met het selecteren van de reacties en die vervolgens sorteren. Komen de reacties dan wel in de goede volgorde uit de database gerold?

Zo ja, voeg dan de JOIN toe aan je query om de gegevens van de support vraag op te halen...
 
Jasper DS

Jasper DS

16/05/2011 17:37:23
Quote Anchor link
Als ik de join weglaat kan ik de support berichten ordenen op hun id. Maar stel nu dat iemand 2 open support berichten heeft dan wil ik dat degene met de recentste reactie als eerste word weergeven. Dit doe ik door met behulp van de join de datum van de reactie op te halen. Het probleem hierbij is dat idpv de recentste reactie de oudste reactie word opgehaald waardoor het niet klopt.

Hieronder ziet u een printscreen met naast de support berichten de datums:
Afbeelding

Hieronder ziet u de fout:
Afbeelding

de support berichten met id 1 en 2 zouden van plaats moeten wisselen als je kijkt naar hun datum in het 1ste plaatje
Gewijzigd op 16/05/2011 17:40:10 door Jasper DS
 
Joren de Wit

Joren de Wit

16/05/2011 17:43:06
Quote Anchor link
Aha, het sorteren gaat dus wel goed. Het probleem is alleen dat ook de oudere reacties in je resultaat set zitten terwijl je dat niet wilt...

Wil je dat in SQL oplossen, gebruik dan UNIQUE op bijvoorbeeld s.id om elk topic maximaal 1x op te halen. Je kunt het ook in PHP oplossen door in de loop, waarin je de resultaatset uitleest, in een array bij te houden welke id's je al gehad hebt. Staat een betreffend id al in die array, dan geef je dat record niet meer weer. Deze laatste is wel de minst efficiente manier aangezien je wel alle records ophaalt terwijl dat niet nodig is...
 
Jasper DS

Jasper DS

16/05/2011 17:52:44
Quote Anchor link
Ik krijg een error als ik UNIQUE(s.id) doe. Bij forums hebben ze dit probleem toch ook? Als ze het forum met de recentste reactie eerst willen weergeven.
Gewijzigd op 16/05/2011 17:53:29 door Jasper DS
 
Jasper DS

Jasper DS

17/05/2011 19:38:38
Quote Anchor link
Bump..
 
Joren de Wit

Joren de Wit

18/05/2011 08:54:28
Quote Anchor link
Welke error krijg je? En hoe zie je query er nu uit?
 
Erik van de Locht

Erik van de Locht

18/05/2011 09:19:40
Quote Anchor link
Je wil dus feitelijk de reacties selecteren, met de support als extra informatie. Probeer eens te selecteren vanuit de reacties tabel en dan joinen naar de support :)
 
Jasper DS

Jasper DS

18/05/2011 13:37:10
Quote Anchor link
@Joren,
De foutmelding ziet er zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
#1064 - 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 'UNIQUE(s.id), s.onderwerp, s.status FROM support_tickets AS t INNER JOIN support' at line 1


De code zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT UNIQUE(s.id), s.onderwerp, s.status
FROM support s
INNER JOIN support_tickets AS t
ON t.id_support = s.id
WHERE s.id_leden = ".mysql_real_escape_string($_SESSION['user_id'])."
ORDER BY t.datum desc


@Erik,
ik heb jouw manier even getest en bekom hetzelfde resultaat als met de andere query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT UNIQUE(s.id), s.onderwerp, s.status
FROM support_tickets AS t
INNER JOIN support AS s
ON s.id = t.id_support
WHERE s.id_leden = 1
ORDER BY t.datum desc
Gewijzigd op 18/05/2011 13:37:41 door Jasper DS
 
Joren de Wit

Joren de Wit

18/05/2011 14:02:26
Quote Anchor link
Oeps, my bet. UNIQUE moet natuurlijk DISTINCT zijn :-)
 
Jasper DS

Jasper DS

18/05/2011 14:04:40
Quote Anchor link
Krijg ik nog steeds hetzelfde resultaat als op mijn 2de afbeelding. Dan toch voor de php oplossing gaan?
 
Jasper DS

Jasper DS

20/05/2011 21:52:23
Quote Anchor link
Toch nog maar een bump..
 

Pagina: 1 2 volgende »



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.