Array in een MySQL query?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jeroen G

Jeroen G

13/03/2009 21:07:00
Quote Anchor link
Ik wil het onderstaande resultaat bereiken met slechts 1 mysql query (dus zonder php). Ik weet echter niet of dit uberhaubt kan, en welke functie te gebruiken. Alvast bedankt voor de tips.

p.s. Ik gebruik veel uitgebreidere tabellen, ik heb mijn vraag proberen te ontdoen van alle niet nuttige info.

ITEMS TABEL

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
id | naam
----------------------------------------
0  | aardappelen
1  | bloemkool
2  | spaghetti


WAARDES TABEL
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
id | item_id | datum       | waarde
----------------------------------------
0  | 0       | 16-01-2009  | 33
1  | 0       | 17-01-2009  | 87
2  | 0       | 18-01-2009  | 41
3  | 1       | 16-01-2009  | 34
4  | 1       | 17-01-2009  | 51
5  | 2       | 16-01-2009  | 58


GEWENSTE QUERY

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
naam         | waarde_array
----------------------------------------
aardappelen  | 33, 87, 41
bloemkool    | 34, 51
spaghetti    | 58
Gewijzigd op 01/01/1970 01:00:00 door Jeroen G
 
PHP hulp

PHP hulp

22/11/2024 18:40:51
 
Frank -

Frank -

13/03/2009 21:28:00
Quote Anchor link
Wat is het doel? Dat is 100x belangrijker dan een query of een stukje PHP-code.

Ik mag hopen dat jouw datums niet zijn opgeslagen zoals je ze hierboven hebt genoteerd, dat zijn namelijk geen datums. Mocht dat wel het geval zijn, ga dan z.s.m. jouw database ombouwen en ga échte datums gebruiken voordat je hopeloos in de shit zit. Datums sla je op in een veld van het type DATE en die eist het ISO-formaat yyyy-mm-dd, bv. 2009-03-13.
 
Jeroen G

Jeroen G

13/03/2009 21:43:00
Quote Anchor link
Nee de datums zijn niet zo opgeslagen, dit is enkel ter illustratie.

Ik zou dit kunnen doen met 'ad-hoc' php, maar dan lukt het mij niet volgens het MVC principe. Dan zou ik namelijk binnen mijn VIEW nog een extra query pér item moeten uitvoeren.

Uiteindelijk word de waarde array omgezet in een grafiek... dan krijg je dus zoiets als dit;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
foreach ($items AS $item)
{
    echo $item['naam'];
    echo maak_grafiek($item['waarde_array']);
}


Het doel is dus eigenlijk; de gewenste query. Ik kan hem dan zelf omzetten naar een grafiek.

Stel ik mijn vraag wel goed?
Gewijzigd op 01/01/1970 01:00:00 door Jeroen G
 
Frank -

Frank -

13/03/2009 21:52:00
Quote Anchor link
Wanneer jij meer dan 1 query nodig hebt om de data te verzamelen voor jouw view, dan heb je meer dan 1 query nodig. Dat heeft niets met een MVC of wat dan ook te maken, dat heeft gewoon te maken met de benodigde data.

MySQL kent geen array-datatype (PostgreSQL en andere databases kennen die wel), maar binnen PHP (en andere talen) zal die "array" gewoon een string zijn. Gebruik deze array's dan ook uitsluitend binnen de database en niet daarbuiten, dat is vragen om problemen.

MVC heeft niets te maken met 1 query, wanneer jij tig queries nodig hebt, dan zul jij tig queries moeten uitvoeren. Daar zal geen enkele MVC moeilijk over doen, het is de gewoonste zaak van de wereld. Databases geven records terug, dus zul je records moeten gebruiken. De heerlijke mismatch tussen objecten en relationele data...
 
Jeroen G

Jeroen G

13/03/2009 21:57:00
Quote Anchor link
Okay... maar hoe moet ik die 2 query's dan combineren? Dat snap ik dan nog niet.. Omdat ik de foreach pas doe in de view..

Dit zou toch ook moeten lukken in een subquery? Dat is mijn vraag eigenlijk ook.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen G
 
Willem Jan Z

Willem Jan Z

13/03/2009 22:01:00
Quote Anchor link
Geen idee wat je nu precies bedoelt, maar de query die je wilt hebben zal in deze strekking zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT i.item_id AS item_id, i.naam AS item_naam, w.waarde AS item_waarde FROM items i, waarden w
WHERE i.id = waarde.item_id
ORDER BY w.item_id ASC

Hoe je nu met PHP die array afhandelt mag je zelf weten.
Iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $waarden
[$row['item_id']][] = $row['item_waarde'];
?>
?
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
 



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.