Group & Order

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sneeuwvlok

Sneeuwvlok

13/07/2007 10:41:00
Quote Anchor link
Ik heb een setje tabellen waaruit ik een klein gedeelte data wil pakken te weten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

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)
PHP script in nieuw venster Selecteer het PHP script
1
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


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
 
PHP hulp

PHP hulp

23/11/2024 09:07:09
 
Klaasjan Boven

Klaasjan Boven

13/07/2007 11:41:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


Tip zet je SQL KEY WORDS in hoofdletters, dus
SELECT FROM WHERE ORDER enz....

Edit:

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.
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Joren de Wit

Joren de Wit

13/07/2007 12:06:00
Quote Anchor link
Quote:
dan wil ik de vermelding tonen waarvan de source_id de hoogste rank heeft, en daarna sorteren op adddate binnen de overgebleven vermeldigen
Zoals Klaasjan al zegt, is dit inderdaad niet mogelijk en wel om de volgende reden.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.