mysql-queries voor gevorderden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Simon Blok

Simon Blok

01/06/2007 11:20:00
Quote Anchor link
Mensen,
Ik zit met een aantal lastige queries. Ik zal maar met de eerste beginnen:
DB-structuur:

player_organisations
-org_id
-naam
-...

player_koersen
-org_id
-datum
-last_value
-difference

in de organisations-tabel staan 132 bedrijven met hun naam en een id. Dit aantal veranderd in principe niet, dus elk bedrijf staat er uiteraard maar 1 keer in. In player_koersen staan de waarden van een aandeel van een bedrijf, dit wordt elk kwartier geüpdate. Dus voor elk bedrijf staan er meerdere records in. Nu wil ik weten wat de top 5 van stijgers is. Dit probeer ik met de volgende querie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT player_organisations.naam,player_koersen.last_value,player_koersen.difference
FROM player_organisations INNER JOIN player_koersen
   ON player_organisations.org_id = player_koersen.org_id
WHERE player_organisations.naam <> 'AEX-index'
ORDER BY player_koersen.difference ASC LIMIT 5

Dit gaat fout, omdat er geordend wordt op difference, dus de hoogste stijgers zijn 5x hetzelfde bedrijf, omdat het veld 'difference' de 5 hoogste waarden heeft in de tabel player_koersen. Hoe kan ik dit oplossen? er MOET gewoon een oplossing zijn, ik voel het....
Alvast bedankt
Gewijzigd op 01/01/1970 01:00:00 door Simon Blok
 
PHP hulp

PHP hulp

20/11/2024 18:32:25
 
Jacco Engel

Jacco Engel

01/06/2007 11:22:00
Quote Anchor link
mySQL Distinct?
mySQL Group By?

Die kant moet je denk ik gaan zoeken :)

GHeb helaas geen tijd om een kan en klaar oplossnig te maken maar dit zou voldoende moeten zijn :)
 
Simon Blok

Simon Blok

01/06/2007 11:31:00
Quote Anchor link
GROUP BY!!!! dat is het!
de oplossing:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT player_organisations.naam,player_koersen.last_value,player_koersen.difference
FROM player_organisations INNER JOIN player_koersen
ON player_organisations.org_id = player_koersen.org_id
WHERE player_organisations.naam <> 'AEX-index'
GROUP BY player_organisations.naam
ORDER BY player_koersen.difference DESC LIMIT 5


DISTINCT werkt uiteraard niet, omdat de waarden van de koersen wel anders zijn per record.
 
Jacco Engel

Jacco Engel

01/06/2007 11:47:00
Quote Anchor link
zoals ik al zei, druk druk druk. Gelukkig is het druk met php dus kan ik over dit zoort dingen wel ff snel brainstormen
 
Simon Blok

Simon Blok

01/06/2007 12:46:00
Quote Anchor link
ik heb er nog één!;-):
Is het mogelijk om uit de tabel player_koersen de gegevens eruit te halen voor bijvoorbeeld 2x per uur, dus zoiets als:

SELECT waarde FROM tabel WHERE datum 2x per uur.
 
Elwin - Fratsloos

Elwin - Fratsloos

01/06/2007 14:47:00
Quote Anchor link
Die laatste snap ik niet helemaal? Bedoel je dat je maar twee keer per uur die gegevens wilt ophalen? Zo ja, ga dan aan een cronjob denken.

Verder, om er voor te zorgen dat je niet volgende week bij de Media Markt staat voor een nieuw toetsenbord, kijk eens naar aliassen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT player_organisations.naam, player_koersen.last_value
FROM FROM player_organisations, player_koersen
WHERE player_organisations.org_id = player_koersen.org_id
Dit kan véél korter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT po.naam, pk.last_value
FROM FROM player_organisations po, player_koersen pk
WHERE po.org_id = pk.org_id
Nu valt het niet zo op, maar als je een stuk of 20 kolommen uit een stuk of vijf tabellen moet halen ben je allang blij dat er aliassen zijn.

Elwin
 
Klaasjan Boven

Klaasjan Boven

01/06/2007 15:25:00
Quote Anchor link
Ik neem aan dat je bedoelt dat een waarde in het laatste uur 2 X voorkomt?
Dan za je met GROUP BY en HAving aan de gang moetem.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
 ding
FROM tabel
WHERE (hier je conditie)
GROUP BY ding
HAVING COUNT(ding) = 2
 
Simon Blok

Simon Blok

01/06/2007 15:43:00
Quote Anchor link
sorry...zal het even wat beter uitleggen:
ik wil een lijstje van 4 waarden van koersen van een bepaald bedrijf. in de database staan meer dan 4 waarden per uur. Is het mogelijk om in 1 querie een lijstje op te vragen van deze vier waarden met een interval van ongeveer een kwartier?
 
Simon Blok

Simon Blok

03/06/2007 16:04:00
Quote Anchor link
Ik ben er nog steeds niet uit! Iemand nog ideeën?
Gewijzigd op 01/01/1970 01:00:00 door Simon Blok
 



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.