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:

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
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 :)
GROUP BY!!!! dat is het!
de oplossing:

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.
zoals ik al zei, druk druk druk. Gelukkig is het druk met php dus kan ik over dit zoort dingen wel ff snel brainstormen
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.
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:
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:
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
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]
SELECT
ding
FROM tabel
WHERE (hier je conditie)
GROUP BY ding
HAVING COUNT(ding) = 2
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?
Ik ben er nog steeds niet uit! Iemand nog ideeën?

Reageren