Group & Order
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+ = table, - = column
+adres
-id
-adres (unique)
-plaats
+vermelding
-id
-adres_id
-info
-source_id
-adddate
+sources
-id
-name
-rank
+adres
-id
-adres (unique)
-plaats
+vermelding
-id
-adres_id
-info
-source_id
-adddate
+sources
-id
-name
-rank
Stel dat ik 2 maal een vermelding heb voor 1 adres, dan wil ik de vermelding tonen waarvan de source_id de hoogste rank heeft, en daarna sorteren op adddate binnen de overgebleven vermeldigen .
Als ik nu echt een query pak als deze:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select
adressen.adres ,
adressen.id as adres_id,
vermeldingen.adddate as adddate,
sources.rank as source_rank,
sources.name as source_name,
from
adressen,
vermeldingen,
sources
where
vermeldingen.adres_id=adressen.id and
adressen.plaats_id=1 and
sources.id=vermeldingen.source_type
order by sources.rank desc, vermeldingen.prijs desc
limit 0,20
adressen.adres ,
adressen.id as adres_id,
vermeldingen.adddate as adddate,
sources.rank as source_rank,
sources.name as source_name,
from
adressen,
vermeldingen,
sources
where
vermeldingen.adres_id=adressen.id and
adressen.plaats_id=1 and
sources.id=vermeldingen.source_type
order by sources.rank desc, vermeldingen.prijs desc
limit 0,20
Dan geeft hij netjes alle juiste adressen terug, maar ook 2 maal de vermelding voor het adres met 2 vermeldingen.
Als ik echter een group by vermeldingen.adres_id voor de order by invoeg krijg ik de verkeerde vermelding terug, de sortering op sources.rank doet z'n werk dan niet meer.
Als ik de group by achter de order by stop doet ie t niet meer en krijg ik een sql error.
Heeft iemand een idee of dit op te lossen is?
Gewijzigd op 01/01/1970 01:00:00 door Sneeuwvlok
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
select
distinct(a.adres) ,
distinct(a.id as adres_id),
distinct(v.adddate as adddate),
distinct(s.rank as source_rank),
distinct(s.name as source_name)
from
adressen a,
vermeldingen v,
sources s
where
v.adres_id=a.id
and
a.plaats_id=1
and
s.id=v.source_type
order by
s.rank desc,
v.prijs desc
limit 0,20
distinct(a.adres) ,
distinct(a.id as adres_id),
distinct(v.adddate as adddate),
distinct(s.rank as source_rank),
distinct(s.name as source_name)
from
adressen a,
vermeldingen v,
sources s
where
v.adres_id=a.id
and
a.plaats_id=1
and
s.id=v.source_type
order by
s.rank desc,
v.prijs desc
limit 0,20
Tip zet je SQL KEY WORDS in hoofdletters, dus
SELECT FROM WHERE ORDER enz....
Edit:
niet goed gelezen
niet goed gelezen
Edit:
Volgens mij kan diet niet met een query. Het kan echter wel met een FUNCTIE ik weet alleen niet precies hoe.
Het probleem is dat je bij het selecteren al gegevens nodig hebt die je nog niet hebt.
Volgens mij kan diet niet met een query. Het kan echter wel met een FUNCTIE ik weet alleen niet precies hoe.
Het probleem is dat je bij het selecteren al gegevens nodig hebt die je nog niet hebt.
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
Quote:
Zoals Klaasjan al zegt, is dit inderdaad niet mogelijk en wel om de volgende reden.dan wil ik de vermelding tonen waarvan de source_id de hoogste rank heeft, en daarna sorteren op adddate binnen de overgebleven vermeldigen
De hoogste source_id rank is een eigenschap van een groep records behorende bij 1 adres. Je zult dus moeten gaan groeperen door een GROUP BY in je query op te nemen. Als direct gevolg is het niet meer mogelijk om de individuele records uit die groep aan te spreken, dus het sorteren van de overige records gaat niet.