[mysql] resultaten uit GROUP query toch allemaal echoën ?

Pagina: 1
Acties:

  • kokorico
  • Registratie: Januari 2004
  • Laatst online: 17-05 10:39
Ik heb deze query:

code:
1
2
SELECT ad.rubriekid AS group_rubriekid, count(*) AS counter
 FROM ad, leden GROUP BY rubriekid ORDER BY counter DESC


Deze 'groupeert' de resultaten op rubriekid met de rubriekid die het meest voorkomt eerst.

Nu wil ik dat hij in de volgorde waarop hij heeft (dus in rubriek volgorde) de resultaten
toch weergeeft. Hoe doe ik dit?

Kijk anders eens op: http://www.easybid.nl/zoe...g=3&prijs_van=&prijs_tot=

Rechts op de pagina staan de query's.

group = group query
selectad = query die advertentie's selecteerd en deze ook in de volgorde van group zou moeten weergeven.

[ Voor 5% gewijzigd door kokorico op 13-11-2004 01:18 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Euj ik niet snap? :?

Als je wil sorteren op rubriekvolgorde, waarom order je dan op de counter :?

Professionele website nodig?


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 05-01 14:41
En waarom 'FROM ad, leden' :?

Als ik jou was zou ik eens een SQL tutorial gaan lezen :)

  • kokorico
  • Registratie: Januari 2004
  • Laatst online: 17-05 10:39
curry684 schreef op zaterdag 13 november 2004 @ 01:22:
Euj ik niet snap? :?

Als je wil sorteren op rubriekvolgorde, waarom order je dan op de counter :?
Kijk eens op :

http://www.easybid.nl/zoe...g=3&prijs_van=&prijs_tot=

Dit is het zoekformulier. Bovenaan zie je de rubrieken waarin de advertenties gevonden zijn. De rubriek met de meeste advertentie's staat bovenaan.

Nu wil ik dat de advertentie's daaronder ook gerangschikt zijn op rubriekid maar in dezelfde volgorde als daarboven. Dus dat de advertentie's uit de rubriek met de meeste advertentie's eerst getoont worden.

Hoe los ik dit op?

Op mijn zoekformulier staan rechts de query's.
selectad = query om advertentie's op te halen
group = query om het overzicht van rubrieken op te halen (dus het de tabel die boven het zoekformulier staat.

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Ik weet niet zeker of ik de opzet van de huidige query's helemaal goed begrijp nu, zoals ik de queries zie is leden er in de queries alleen om het aantal te berekenen om de tabel te sorteren.

Ik kom dan tot zoiets, met een tijdelijke tabel (met mysql 4.1 of hoger zou het ook wel zonder kunnen):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// maak temp tabel
CREATE TEMPORARY TABLE rubriekCount
    SELECT 
        ad.id AS ad_id,
        COUNT(*) AS counter 
    FROM
        ad JOIN leden ON (ad.gebruikersid = leden.id)
    WHERE (ad.titel LIKE '%%' OR ad.omschrijving LIKE '%%') 
        AND (leden.land_id = '1' OR leden.land_id = '2') 
        AND (ad.type = '1' OR ad.type = '2') 
    GROUP BY rubriekid 
    ORDER BY counter DESC

// selecteer temp tabel (was group)
Select * 
from rubriekCount;

// selecteer ads met join op temptabel
SELECT 
  ad.id AS ad_id,
  ad.rubriekid AS ad_rubriekid, 
  ad.type AS ad_type, 
  ad.titel AS ad_titel, 
  ad.prijs AS ad_prijs, 
  ad.prijstype AS ad_prijstype, 
  ad.omschrijving AS ad_omschrijving, 
  ad.foto1 AS ad_foto1, 
  ad.views AS ad_views, 
  ad.tijd AS ad_tijd,
  rubriekCount.counter
FROM ad JOIN rubriekCount ON (ad.gebruikersid = rubriekCount.ad_id)
ORDER BY rubriekCount.counter DESC 
LIMIT 0,20

//verwijder temp tabel:
DROP TABLE rubriekCount

  • kokorico
  • Registratie: Januari 2004
  • Laatst online: 17-05 10:39
Ik heb het nu anders opgelost.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SELECT ad.id AS ad_id,
 ad.hoofdrubriek AS ad_hoofdrubriek,
 ad.rubriekid AS 
ad_rubriekid, ad.type AS ad_type, 
ad.titel AS ad_titel,
 ad.prijs AS ad_prijs, 
ad.prijstype AS ad_prijstype, 
ad.omschrijving AS ad_omschrijving,
 ad.foto1 AS ad_foto1, 
ad.views AS ad_views,
 ad.tijd AS ad_tijd,
CASE ad.rubriekid
 WHEN 47 THEN 0 
WHEN 1050 THEN 1 
WHEN 25 THEN 2 
WHEN 187 THEN 3 
WHEN 103 THEN 4 
WHEN 27 THEN 5 
WHEN 115 THEN 6 
WHEN 9000 THEN 9000 
END as rubrieksorteer
 FROM ad, leden 
WHERE ( ad.titel LIKE '%%' OR ad.omschrijving LIKE '%%' )
 AND ad.gebruikersid = leden.id
 AND (leden.land_id = '1' OR leden.land_id = '2')
 AND (ad.type = '1' OR ad.type = '2') 
ORDER BY rubrieksorteer ASC
, ad.tijd DESC LIMIT 0,10

[ Voor 15% gewijzigd door kokorico op 14-11-2004 20:31 ]

Pagina: 1