Toon posts:

[MySQL] DISTINCT en RAND werkt niet samen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende query:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
mysql_query("
SELECT 
    DISTINCT bedrijf.naam AS naam
FROM 
    bedrijf, zoekwoorden
WHERE 
    bedrijf.id = zoekwoorden.idbedrijf 
    AND 
    (zoekwoorden.woord LIKE '%test%' || bedrijf.naam LIKE '%test%' ) 
ORDER BY RAND() 
LIMIT 5
");


Maar ik krijg geen unieke resultaten lijst terug.
Als ik de RAND() vervang door bedrijf.naam dan werkt het wel, maar ik wil het natuurlijk werkend hebben met RAND().

Werkt het niet omdat MySQL misschien een random nr genereerd en dit toevoegd aan de recordrow en hierdoor de DISTINCT niet meer werkt?
En weet iemand een oplossing voor mijn probleem?

[ Voor 5% gewijzigd door Verwijderd op 16-08-2004 11:35 ]


  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Misschien een stomme vraag, maar wat krijg je wel terug?

een error?
een lijst met duplicaten?
iets anders?

edit:
sorry hoor, maar dit is niet veel moeite?
http://www.google.com/sea...F-8&q=mysql+rand+distinct
edit:
Tenminste, het lijkt me dat met zoveel resultaten het antwoord er tussen moet zitten ??

[ Voor 56% gewijzigd door RwD op 16-08-2004 14:41 ]


Verwijderd

Topicstarter
Bij de query met RAND() krijg ik ook dubbele resultaten terug en zonder RAND() niet. Ik heb een koppeltabel zoekwoorden. Hierin staan zoekwoorden met het id van het berdijf waarbij het zoekwoord hoort.

tabel ziet er zo uit:
Zoekwoorden
- idbedrijf
- woord

Zo heb ik bv:
Zoekwoorden
- 234, computertafel
- 234, spelcomputer
- 234, computer
- 235, computeronderdelen

Als ik nou op %computer% zoek krijg ik 4 rows terug. Maar ik wil alleen unieke rows hebben. In dit geval dus 2 rows.
Dit probeer ik te bereiken dmv DISTINCT.

  • ixi
  • Registratie: December 2001
  • Laatst online: 17-05 17:12

ixi

Je zou "GROUP BY bedrijf.naam" eens kunnen proberen ipv "DISTINCT".

Als je de query in PHP uitvoert kan je natuurlijk ook met PHP de "ORDER BY RAND()" doen... minder mooi maar het werkt.

Verwijderd

Topicstarter
Dat werkt idd wel, maar weet iemand ook waarom DISTINCT niet werkt en is GROUP BY niet langzamer?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 16 augustus 2004 @ 12:50:
Dat werkt idd wel, maar weet iemand ook waarom DISTINCT niet werkt en is GROUP BY niet langzamer?
Als ik me niet vergis werkt DISTINCT met geen enkele aggregate functie. En zoveel langzamer zal GROUP BY echt niet zijn, dat haalt immers in principe ook alleen de dubbele bedrijven eruit.
Wat ik me afvraag is waarom je random wil sorteren. Waarom sorteer je niet op alfabet? Is veel makkelijker terugvinden in de resultset voor de gebruiker. Of je zou zelfs kunnen sorteren op hoe vaak een bedrijf gevonden is met de search, dus als er vaak wordt gezocht op "fiets" en er staat een bedrijf met het keyword "fiets" in je tabel, dan hoog je ergens in de bedrijventabel een tellertje op, waarop je later dan weer kan gaan sorteren. Zo krijg je bedrijven die vaak gevonden worden bovenaan. Lijkt me een heel stuk logischer dan random...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
NMe84 schreef op 16 augustus 2004 @ 13:27:
[...]

Als ik me niet vergis werkt DISTINCT met geen enkele aggregate functie. En zoveel langzamer zal GROUP BY echt niet zijn, dat haalt immers in principe ook alleen de dubbele bedrijven eruit.
Volgens mij werkt DISTINCT wel met aggregate functions, je ziet het toch ook vaak gebruikt worden met COUNT().
NMe84 schreef op 16 augustus 2004 @ 13:27:
Wat ik me afvraag is waarom je random wil sorteren. Waarom sorteer je niet op alfabet? Is veel makkelijker terugvinden in de resultset voor de gebruiker. Of je zou zelfs kunnen sorteren op hoe vaak een bedrijf gevonden is met de search, dus als er vaak wordt gezocht op "fiets" en er staat een bedrijf met het keyword "fiets" in je tabel, dan hoog je ergens in de bedrijventabel een tellertje op, waarop je later dan weer kan gaan sorteren. Zo krijg je bedrijven die vaak gevonden worden bovenaan. Lijkt me een heel stuk logischer dan random...
Ik gebruik RAND(), omdat ik een random resultaat wil en niet gesorteerd op naam oid. Anders had ik idd wel op naam gesorteerd.
Je ziet dat ik ook LIMIT gebruik en ik wil niet dat steeds dezelfde bedrijven getoond worden maar random 5 van de x aantal bedrijven.

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 23-05 21:33
Heb eens met een zelfde probleem gezeten. Mijn RAND() kon niet samen werken met mn WHERE...

Heb toen maar gewoon de query gedraaid.. de results in een array geperst.. toen die array geshuffled en daarmee verder gewerkt. Beetje overhead.. maar werkt wel :P

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 16 augustus 2004 @ 14:10:
Volgens mij werkt DISTINCT wel met aggregate functions, je ziet het toch ook vaak gebruikt worden met COUNT().
Hmm, ok, zou kunnen. Heb het zelf iig nooit zo gebruikt. :)
Verwijderd schreef op 16 augustus 2004 @ 14:10:
Ik gebruik RAND(), omdat ik een random resultaat wil en niet gesorteerd op naam oid. Anders had ik idd wel op naam gesorteerd.
Je ziet dat ik ook LIMIT gebruik en ik wil niet dat steeds dezelfde bedrijven getoond worden maar random 5 van de x aantal bedrijven.
Ok, je zal je redenen wel hebben. Maar heb je die GROUP BY al geprobeerd? En wat voor resultaat boek je daarmee?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 20-05 16:16

BrZ

Verwijderd schreef op 16 augustus 2004 @ 12:50:
Dat werkt idd wel, maar weet iemand ook waarom DISTINCT niet werkt en is GROUP BY niet langzamer?
Ik heb het hier even getest, en bij mij werkt het wel gewoon...
Je query ziet er verder goed uit, maar het lijkt me sterk dat het aan je MySQL configuratie ligt :?
Pagina: 1