SQL verder gaan op gemaakte query

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Howmessages
  • Registratie: Maart 2014
  • Laatst online: 11-09 10:33
Mijn vraag

Ik wil graag data uit een gemaakte query halen, maar dit wil niet lukken. Het gaat om data uit de volgende query:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT SUM(sum_1) as sum_1_total, SUM(sum_2) as sum_2_total 
FROM table_1 
WHERE Date BETWEEN '$selectedDate 00:00:00' AND '$selectedDate 23:59:59'

UNION ALL

SELECT SUM(sum_1), SUM(sum_2) 
FROM table_2 Date BETWEEN '$selectedDate 00:00:00' AND '$selectedDate 23:59:59'

UNION ALL

SELECT SUM(sum_1), SUM(sum_2)
FROM table_3 Date BETWEEN '$selectedDate 00:00:00' AND '$selectedDate 23:59:59'


Uit deze query krijg ik mooi de twee rijen sum_1_total en sum_2_total met de opgevraagde data. Echter wil ik daarna ook SUM(sum_1_total) en SUM(sum_2_total) hebben.

Wat ik al gevonden of geprobeerd heb

Het is mij wel gelukt om een view te maken in PHPmyadmin, waar ik vervolgens in PHP de data uit kan halen. Echter kan ik dan natuurlijk geen gebruik maken van $selectedDate. En in PHP die view aanmaken, zorgt ervoor dat ik die ook steeds moet wijzigen, omdat de $selectedDate natuurlijk steeds aangepast wordt.

Volgens mij moet het mogelijk zijn om na het maken van een query, de data die daar in staat, ook te gebruiken voor een volgende query. Ik heb van alles geprobeerd (bovenstaande query tussen haakjes en daarna verder gaan, komma's etc..) maar nog niets is gelukt. En omdat ik niet weet hoe zoiets zou heten, is het ook moeilijk Google te raadplegen voor meer informatie.

Hopelijk is er iemand die mij op weg kan helpen.

[ Voor 3% gewijzigd door Howmessages op 11-02-2020 16:13 ]

Beste antwoord (via Howmessages op 11-02-2020 19:08)


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Even terug naar de essentie: in principe heb je nu dit:

SQL:
1
2
3
Select 10 as sum1
UNION ALL
Select 20 as sum1

Wat let je om dit te doen?

SQL:
1
2
3
4
5
6
Select Sum(sum1)
FROM (
    Select 10 as sum1
    UNION ALL
    Select 20 as sum1
) as X
;)
Howmessages schreef op dinsdag 11 februari 2020 @ 15:53:
En omdat ik niet weet hoe zoiets zou heten, is het ook moeilijk Google te raadplegen voor meer informatie.
Probeer eens 'subquery' ;)

[ Voor 32% gewijzigd door RobIII op 11-02-2020 16:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Even terug naar de essentie: in principe heb je nu dit:

SQL:
1
2
3
Select 10 as sum1
UNION ALL
Select 20 as sum1

Wat let je om dit te doen?

SQL:
1
2
3
4
5
6
Select Sum(sum1)
FROM (
    Select 10 as sum1
    UNION ALL
    Select 20 as sum1
) as X
;)
Howmessages schreef op dinsdag 11 februari 2020 @ 15:53:
En omdat ik niet weet hoe zoiets zou heten, is het ook moeilijk Google te raadplegen voor meer informatie.
Probeer eens 'subquery' ;)

[ Voor 32% gewijzigd door RobIII op 11-02-2020 16:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Howmessages
  • Registratie: Maart 2014
  • Laatst online: 11-09 10:33
RobIII schreef op dinsdag 11 februari 2020 @ 16:13:

SQL:
1
2
3
4
5
6
Select Sum(sum1)
FROM (
    Select 10 as sum1
    UNION ALL
    Select 20 as sum1
) as X
Dit was inderdaad de oplossing. Dankjewel! Iets vergelijkbaars had ik ook bedacht, maar zonder succes. Ik denk omdat ik de as X na Sum(sum1) had geplaatst.
Probeer eens 'subquery' ;)
Nu ik het weet, is het heel voor de hand liggend :F

Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 20:47
Ik ben toch wel erg benieuwd wat er allemaal in $selectedDate kan komen te staan :)

(Keywords: SQL injection, prepared statements, input sanitization, ..)

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

  • Howmessages
  • Registratie: Maart 2014
  • Laatst online: 11-09 10:33
nescafe schreef op dinsdag 11 februari 2020 @ 19:46:
Ik ben toch wel erg benieuwd wat er allemaal in $selectedDate kan komen te staan :)

(Keywords: SQL injection, prepared statements, input sanitization, ..)
Een datum.

De PWA wordt alleen intern binnen een klein bedrijf gebruikt en heeft geen gevoelige data, dus veiligheid is niet van groot belang.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Howmessages schreef op woensdag 12 februari 2020 @ 10:27:
De PWA wordt alleen intern binnen een klein bedrijf gebruikt en heeft geen gevoelige data, dus veiligheid is niet van groot belang.
Ook binnen (kleine) bedrijven heb je soms kwaadwillenden; het mag dan geen gevoelige data betreffen, een DELETE FORM ORDERS wil je ook niet heel graag uitgevoerd zien ;) Mocht je dat nog niet gedaan hebben, controleer dan in ieder geval dat het onmogelijk is iets anders dan een datum in $selectedDate te krijgen; als die waarde op enige manier recht van een client komt (of dat nou een querystring is, een cookie of whatever...) dan moet je écht zorgen dat die waarde sanitized wordt voordat 'ie de query in gaat. Never trust user input. Nog beter gebruik je Parametrized Queries.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:20
Weet je overigens zeker dat je niet eigenlijk ook een group by nodig hebt?

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • Stoelpoot
  • Registratie: September 2012
  • Niet online
RobIII schreef op woensdag 12 februari 2020 @ 10:35:
[...]

Ook binnen (kleine) bedrijven heb je soms kwaadwillenden; het mag dan geen gevoelige data betreffen, een DELETE FORM ORDERS wil je ook niet heel graag uitgevoerd zien ;) Mocht je dat nog niet gedaan hebben, controleer dan in ieder geval dat het onmogelijk is iets anders dan een datum in $selectedDate te krijgen; als die waarde op enige manier recht van een client komt (of dat nou een querystring is, een cookie of whatever...) dan moet je écht zorgen dat die waarde sanitized wordt voordat 'ie de query in gaat. Never trust user input. Nog beter gebruik je Parametrized Queries.
Buiten dat, is de 'gebruiker' van een database de ontwikkelaar. Door Parametrized Queries goed te gebruiken, behoed je jezelf voor vreemde bugs als je eigen code niet 100% klopt (en bijvoorbeeld daardoor een DELETE WHERE niet helemaal goed gaat).
Pagina: 1