Toon posts:

[Mysql] random 3 records per type ophalen

Pagina: 1
Acties:
  • 160 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

ik ben hier al even mijn hersenen aan het breken over het volgende:

ik heb een tabel met per record een code en een categorie waartoe die code behoort. De code is altijd uniek.

vb.
CodeCategorie
AAA1
AAB1
AAC1
AAD1
AAE2
AAF2
AAG2
AAH2


Nu wil ik per categorie random 3 codes selecteren in 1 query. Weet iemand hoe dit juist kan?

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 02-10 14:12

Yo-han

nope.

Ik weet het niet zeker maar probeer eens het volgende:

SQL:
1
2
3
4
5
6
7
SELECT (SELECT Code 
               FROM tabel t2 
               WHERE t.Categorie = t2.Categorie 
               ORDER BY RAND()
               LIMIT 1)
FROM tabel t 
GROUP BY Categorie


edit:

Alleen moet je nu zorgen dat er 3 codes uitfietsen en niet 1 per categorie... :X

[ Voor 16% gewijzigd door Yo-han op 11-01-2007 12:32 . Reden: stupid! lezen! ]


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op donderdag 11 januari 2007 @ 11:58:
ik heb een tabel met per record een code en een categorie waartoe die code behoort. De code is altijd uniek.

Nu wil ik per categorie random 3 codes selecteren in 1 query. Weet iemand hoe dit juist kan?
Heeft je tabel naast een code- en categorie- geen id-rij? Sowieso lijkt dit me vrij lastig te realiseren in SQL. :)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Verwijderd

Topicstarter
wolkje schreef op donderdag 11 januari 2007 @ 12:34:
[...]

Heeft je tabel naast een code- en categorie- geen id-rij? Sowieso lijkt dit me vrij lastig te realiseren in SQL. :)
tuurlijk niet, waarom moet je een id-rij hebben als code en categorie perfect als primary key kunnen dienen

  • Compusmurf
  • Registratie: Oktober 2003
  • Laatst online: 16-08-2024
Als je nu eens eerst de groepen ophaalt en binnen die groepen dan 3 rijen op haalt. Ik weet verder ook geen oplossing voor dit probleem als je dit in 1 query wilt hebben.


SELECT ** GROUP BY *** {

SELECT ** WHERE GROUP = *** LIMIT (3){

Print ***
}

}

http://Compusmurf.xs4all.nl


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op donderdag 11 januari 2007 @ 12:36:
[...]


tuurlijk niet, waarom moet je een id-rij hebben als code en categorie perfect als primary key kunnen dienen
Ik zie een RAND() functie anders geen waarde in de vorm van 'AAB' teruggeven, maar integers. En in jouw huidige database zijn die niet te gebruiken om een willekeurige code te pakken, maar hooguit een willekeurige categorie. Vandaar dat een soort id-rij juist wél van belang is. :)

[hersenspinsel]Misschien is het een idee om een id-rij toe te voegen die per-categorie een nieuwe id-rij (teller) maakt? Dit invullen zul je waarschijnlijk wel in je applicatie af moeten handelen. Maar het maakt misschien het selecteren van willekeurige waarden al stukken makkelijker...[/hersenspinsel]

Overigens denk ik niet dat dit in 1 query te doen is. Waarschijnlijk ben je sneller klaar door alles binnen te halen en in je applicatie een random waarde op te zoeken. :)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Verwijderd

Topicstarter
wolkje schreef op donderdag 11 januari 2007 @ 12:44:
[...]

Ik zie een RAND() functie anders geen waarde in de vorm van 'AAB' teruggeven, maar integers. En in jouw huidige database zijn die niet te gebruiken om een willekeurige code te pakken, maar hooguit een willekeurige categorie. Vandaar dat een soort id-rij juist wél van belang is. :)

[hersenspinsel]Misschien is het een idee om een id-rij toe te voegen die per-categorie een nieuwe id-rij (teller) maakt? Dit invullen zul je waarschijnlijk wel in je applicatie af moeten handelen. Maar het maakt misschien het selecteren van willekeurige waarden al stukken makkelijker...[/hersenspinsel]

Overigens denk ik niet dat dit in 1 query te doen is. Waarschijnlijk ben je sneller klaar door alles binnen te halen en in je applicatie een random waarde op te zoeken. :)
Humm daar zit je toch een beetje fout... je kan ook order by rand() doen, dat heeft niets met integers op zich te maken

  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op donderdag 11 januari 2007 @ 12:57:
Humm daar zit je toch een beetje fout... je kan ook order by rand() doen, dat heeft niets met integers op zich te maken
Ah nu zie ik het. Nooit geweten dat dat kon eigenlijk. Weer wat geleerd. Dan zou de code die Yo-han gepost heeft misschien best wel eens kunnen werken. Heb je die al getest? Ook met limit 3?

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 12:53

ReseTTim

Chocolate addicted

ik zou zeggen maak er verschillende arrays van.. dus per categorie een array die zich aanmaakt naar de hoeveelheid categorien die zich voorkomen in de dbase.

vervolgens laat je per array random 3 codes eruit komen.. misschien is dit een oplossing :?

Mijn profiel - Te koop: Overzicht van spullen..


Verwijderd

Verwijderd schreef op donderdag 11 januari 2007 @ 12:57:
Humm daar zit je toch een beetje fout... je kan ook order by rand() doen, dat heeft niets met integers op zich te maken
Weet je dat zeker??? Bij ORDER BY <getal> wordt georderd op de <getal>ste kolom uit je select statement. Ik kan me niet voorstellen dat dat het effect is dat je zoekt...

  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op donderdag 11 januari 2007 @ 19:44:
[...]
Weet je dat zeker??? Bij ORDER BY <getal> wordt georderd op de <getal>ste kolom uit je select statement. Ik kan me niet voorstellen dat dat het effect is dat je zoekt...
edit:
zie onder

[ Voor 24% gewijzigd door Cloud op 12-01-2007 19:57 . Reden: het kan dus tóch! ]

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • Upsal
  • Registratie: Mei 2005
  • Laatst online: 27-08-2024
Verwijderd schreef op donderdag 11 januari 2007 @ 19:44:
[...]
Weet je dat zeker??? Bij ORDER BY <getal> wordt georderd op de <getal>ste kolom uit je select statement. Ik kan me niet voorstellen dat dat het effect is dat je zoekt...
De MySQL manual zegt dat ORDER BY RAND() wél de resultset in een willekeurige volgorde toont: http://dev.mysql.com/doc/...-functions.html#id3154257.

  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Upsal schreef op vrijdag 12 januari 2007 @ 19:45:
De MySQL manual zegt dat ORDER BY RAND() wél de resultset in een willekeurige volgorde toont: http://dev.mysql.com/doc/...-functions.html#id3154257.
Ah dus toch. Persoonlijk vind ik het compleet onlogisch, want het zou veel logischer zijn om te sorteren op de nde kolom, ookal heb je daar niets aan. :)
Nouja in dit geval moet de TS er al lang uitgekomen zijn met z'n query, want dan issie gewoon mogelijk. Alleen de TS reageert helaas niet meer... Dus of het gelukt is?

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana

Pagina: 1