[MySQL]Elke row maar 1x gereturned krijgen, hoe?

Pagina: 1
Acties:

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 19:23

WoutF

Hoofdredacteur
Topicstarter
Ik heb een vraagje. Bij de site waar ik aan bezig ben zit een reageer functie. En ik wil een lijstje met de laatste 10 posts waar op gereageerd is laten zien. Daarvoor heb ik de volgende query
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$get_reac = mysql_query("select * from reacties order by time desc limit 10",$db);
while ($reactie = mysql_fetch_array($get_reac))
{
$get_re = mysql_query("
SELECT     users.*, 
merken.Merknaam, 
typen.Typenaam,
reacties.time
FROM       users
INNER JOIN merken ON merken.ID = users.merk
INNER JOIN typen ON typen.ID  = users.type 
INNER JOIN reacties ON reacties.Scoot_ID = users.ID where reacties.ID = $reactie[ID]
",$db);
?>

Opzich werkt dit goed, maar het probleem is het volgende.
Stel dat er op dat de 2 meest recente reacties op ID nummer 1 gemaakt zijn. Ik krijg dan nu in mijn query result ook 2x die row terug. Hoe zorg ik ervoor dat ik die dan maar 1x terug krijg.

Een beetje het idee zoals de reactie tracker op de FP van t.net

Ik heb al geprobeerd te zoeken maar aangezien ik niet precies weet wat ik moet doen weet ik ook niet op welke woorden ik moet zoeken.

Verwijderd

Ik heb daar zelf ook zeer lang mee zitten klooien. Mijn ervaring zegt dat het errug lastig is om zo'n resultaat uit één query te halen.

Daarom raad ik aan twee queries te gebruiken, wat je kennelijk al gedaan hebt.
Je bent al een aardig eind opweg, zorg alleen dat je in je eerste query een distinct en een group by plaats op het id veld (ik neem aan dat je dat gebruikt). Daarnaast moet je time vervangen door max(time).

Als ik je vraagstelling goed begrijp moet dit antwoord je aardig in de richting brengen

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 19:23

WoutF

Hoofdredacteur
Topicstarter
Op vrijdag 01 februari 2002 21:37 schreef Kjoe het volgende:
Ik heb daar zelf ook zeer lang mee zitten klooien. Mijn ervaring zegt dat het errug lastig is om zo'n resultaat uit één query te halen.

Daarom raad ik aan twee queries te gebruiken, wat je kennelijk al gedaan hebt.
Je bent al een aardig eind opweg, zorg alleen dat je in je eerste query een distinct en een group by plaats op het id veld (ik neem aan dat je dat gebruikt). Daarnaast moet je time vervangen door max(time).

Als ik je vraagstelling goed begrijp moet dit antwoord je aardig in de richting brengen
Ik doe dit
code:
1
select distinct * from reacties group by ID order by time desc limit 10

Dit geeft geen errors, maar nog wel 2x hetzelfde record
Hier gaat het nog goed, maar als ik de max(time) erin gooi
code:
1
select distinct * from reacties group by ID order by max(time) desc limit 10

Dan returned MySQL het volgende
Invalid use of group function
Terwijl ik iets aan de 'order by' verander, niet de 'group by'

:?

Verwijderd

Probeer dit eens:
code:
1
select distinct(id) as id, max(time) as time from reacties group by id order by time desc limit 10

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 19:23

WoutF

Hoofdredacteur
Topicstarter
Op vrijdag 01 februari 2002 22:09 schreef Kjoe het volgende:
Probeer dit eens:
---code----
Code geeft geen errors, maar nog steeds 2x dezelfde row terug ;(

Verwijderd

Dat is wel heel bizar. Maak je wel gebruik van primary keys??? Lijkt me overigens een overbodige vraag maar ik vind het gewoon raar omdat het ding het bij mij gewoon foutloos doet.

Ik krijg geen enkele dubbele record terug, waar er toch wel 600 in de tabel zitten

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 19:23

WoutF

Hoofdredacteur
Topicstarter
Op vrijdag 01 februari 2002 22:19 schreef Kjoe het volgende:
Dat is wel heel bizar. Maak je wel gebruik van primary keys??? Lijkt me overigens een overbodige vraag maar ik vind het gewoon raar omdat het ding het bij mij gewoon foutloos doet.

Ik krijg geen enkele dubbele record terug, waar er toch wel 600 in de tabel zitten
|:(
Query die jij gaf was goed maar die group by moet natuurlijk niet ID zijn aangezien dat gewoon het unieke nummer van elke reactie is. Scoot_ID is het idee waar de reactie bij hoort, ik group daar nu op en dat werkt.

Hartelijk bedankt :)
Pagina: 1