2 query's in één
Ik kan het maar niet bedenken hoe ik de volgende twee query's in één krijg:
Code (php)
1
2
3
2
3
$result_jan_g = mysql_fetch_assoc(mysql_query("SELECT COUNT(id) AS teller_g FROM transactions WHERE transdate BETWEEN CONCAT(YEAR(NOW()), '-01-01 00:00:00') AND CONCAT(YEAR(NOW()), '-01-31 23:59:59') AND type = 'G'"));
$result_jan_d = mysql_fetch_assoc(mysql_query("SELECT COUNT(id) AS teller_d FROM transactions WHERE transdate BETWEEN CONCAT(YEAR(NOW()), '-01-01 00:00:00') AND CONCAT(YEAR(NOW()), '-01-31 23:59:59') AND type = 'D'"));
$result_jan_d = mysql_fetch_assoc(mysql_query("SELECT COUNT(id) AS teller_d FROM transactions WHERE transdate BETWEEN CONCAT(YEAR(NOW()), '-01-01 00:00:00') AND CONCAT(YEAR(NOW()), '-01-31 23:59:59') AND type = 'D'"));
Kan iemand me verder helpen? Ik moet dus 2 outputs krijgen, één van de getelde goederen en één van de getelde diensten.
Hartstikke bedankt alvast!
Niels
Als je 2 verschillende outputs wil krijgen, waarom wil je dan alles in 1 query doen?
Anders heb ik 2 x 12 = 24 query's. (Voor een grafiek, moet per maand 2 waarden hebben; goederen en diensten)
Bedankt voor je reactie!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
COUNT(id) AS aantal,
type
FROM
transactions
WHERE
YEAR(transdate) = YEAR(CURRENT_DATE)
WHERE
type IN ('D','G')
GROUP BY
type
COUNT(id) AS aantal,
type
FROM
transactions
WHERE
YEAR(transdate) = YEAR(CURRENT_DATE)
WHERE
type IN ('D','G')
GROUP BY
type
Wanneer je toch alles van het hele jaar wilt hebben, ga je niet klooien met CONCAT, wat toch al een vreemde functie is. Configureer de MySQL-database fatsoenlijk, is toch al nodig, dan kun je met pipes || werken. Dat is standaard SQL en werkt in vele databases. Verder even het type opvragen en dit ook in de GROUP BY zetten.
Het fetchen en uitvoeren van de query zo lekker inelkaar geprakt, zal wel een heel slecht voorbeeld zijn, normaal haal je dit soort dwaze constructies vast niet in je hoofd. Zonder foutafhandeling heb je per definitie een heel slecht script.
Wanneer je alleen de types D en G in de tabel hebt staan, kun je de WHERE weglaten.
Edit: Wanneer je de resultaten per maand wilt hebben, probeer deze dan eens:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
COUNT(id) AS aantal,
type,
YEAR(transdate) AS jaar,
MONTH(transdate) AS maand
FROM
transactions
WHERE
YEAR(transdate) = YEAR(CURRENT_DATE)
WHERE
type IN ('D','G')
GROUP BY
type, jaar, maand
COUNT(id) AS aantal,
type,
YEAR(transdate) AS jaar,
MONTH(transdate) AS maand
FROM
transactions
WHERE
YEAR(transdate) = YEAR(CURRENT_DATE)
WHERE
type IN ('D','G')
GROUP BY
type, jaar, maand
Met opzet niet voor DATE_FORMAT gekozen, vaak is het handiger om de boel dan als losse waardes retour te krijgen.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Je noemt 12 query's, bedoel je daarmee dat je naast G en D alle andere letters tot en met K ook wilt hebben, allemaal in een nieuwe output?
Dan ebn je maar 1 query regel nodig
WOW, SUPER! Ik heb hier nog een 500 bladzijde dik SQL boek liggen, daar ga ik me zeker eens in verdiepen, pff. Eigenlijk is het best logisch!
Over de constructie: Normaal gaat het uiteraard niet zo, maar ik was alleen bezig met de query, dus had effe snel een php scriptje erachter gezet.
P.S: Wat bedoel je met pipes?
Marco:
Nee, G staat voor goederen en D voor diensten. Deze aantallen moest ik per maand hebben voor beide.
Allebei super bedankt voor jullie reacties!
Wat een GET-variabele met dit geheel te maken heeft, geen flauw idee. De 2e query haalt in 1x alle gegevens voor een heel jaar op en zal ook in 2009 en 2010 zijn werk doen. Alleen wanneer je gegevens van een ander jaar wilt opvragen, zul je de query moeten aanpassen, het jaartal in e vergelijking moet dan variabel zijn.
Wat betreft de pipes, ik snap het nog steeds niet 100%. Maar ik ga 't opzoeken!
Thanks iedereen!!