Toon posts:

MySQL Subquery?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit met het volgende probleem en ik kom er niet meer uit.

Ik heb twee tabellen namelijk
tblorder en tblorderpaymant

Ik de tblorder zit bijvoorbeeld het record
norderid = 1
en in tblorderpayment ziten de records
norderpaymentid 1
norderid 1
en
norderpayment 2
norderid1

Het kan dus voorkomen dat een order betaald gaat worden en dat het mislukt en dat ze opnieuw gaan betalen. We willen dan graag alles in een log hebben dus het oude record blijft bestaan.

Nu had ik eerst een view gemaakt waarin ik het laatste norderpaymentid ophaalde in een vworder waar dus de link stond.

MySQL vind een subquery in een view niet tof dus dit ging niet werken.

Ik heb nog wel een vworder waar ook klant gegevens en meer order gegevens in zitten dus die gbruik ik nog wel.

Nu zou ik toch graag in één query de orderpayment2 record willen ophalen (hierin staat alles vermeld, status van betalen en manier etc...

Hoe kan ik dit nu het beste doen in één query?

Ik had dus subselects in een view en vervolgens die view joinen met tblorderpayment maar dit is gewoon te traag geworden... wat is een andere wellicht betere manier

Acties:
  • 0 Henk 'm!

  • Motrax
  • Registratie: Februari 2004
  • Niet online

Motrax

Profileert

Subquery zou gewoon moeten werken. Tenminste, dat mag ik hopen.

Dat het traag is kan aan heel veel dingen liggen.

Post je SQL eens en wat zijn je indexen?

☻/
/▌
/ \ Analyseert | Modelleert | Valideert | Solliciteert | Generaliseert | Procrastineert | Epibreert |


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Indexen zitten allemaal goed, in postegresql werkte het ook gewoon goed.

We hebben ook al een lange tijd gezocht op mysql en vandaar weten we dat het probleem in een view met subqueries zit.

Wanneer ik hem gewoon als query run is hij heel snel.... vandaar dat ik ook weet dat de index goed zit.

Zoek nu dus gewoon andere manier om het op te lossen.... (andere query)

Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Ik ken MySQL niet goed genoeg om zinnige dingen te zeggen over subquery's in views, maar als het waar is wat je zegt dat hij die views anders uitvoert dan een gelijke query is er wel iets heel raars aan de hand.

Hoewel alles mogelijk is, zou het me wel verbazen. Kun je logs laten zien?

edit: Verder kan ik je niet inhoudelijk helpen, omdat de vraagstelling me niet duidelijk is.

[ Voor 14% gewijzigd door winkbrace op 24-11-2008 17:07 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb nu deze query gemaakt

select *
from tblorder o, tblorderpayment op
left join tblorderpayment op2 on op.dentry > op2.dentry and op.norderid = op2.norderid
where o.norderid = op.norderid and o.norderid=15287 and op.dentry is not null


alleen dentry is nooit null (Staat altijd datum in) dus het klopt nog iet, krij gnu dus een record of 631 terug....


er zijn heel veel betaalrecords en hij filter dus nog niet de goede eruit ..

Acties:
  • 0 Henk 'm!

  • Redshark
  • Registratie: Mei 2002
  • Laatst online: 02:38
Welke versie mysql gebruik je? Subqueries kunnen vanaf 4.1 dus misschien zit je op een oude versie?
Maar wat wil je nu precies zien, alle betalingen of alleen degene die gelukt zijn maar wel de rest opslaan?


Voor alles kun je toch gewoon de tabellen joinen ?

Edit: en misschien code -tags gebruiken?

[ Voor 7% gewijzigd door Redshark op 24-11-2008 18:26 ]


Acties:
  • 0 Henk 'm!

  • Motrax
  • Registratie: Februari 2004
  • Niet online

Motrax

Profileert

SQL:
1
2
3
4
5
6
7
-- Selecteer velden met de hoogste payment uit TBLORDER en TBLORDERPAYMENT
--MAX() negeert standaard NULL waardes

SELECT velden_die_je_wil, MAX(payment.dentry)
FROM TLBORDER ord LEFT OUTER JOIN  TBLORDERPAYMENT payment ON ord.norderid = payment.norderid
GROUP BY velden_die_je_wil
;

Maar goed, geen idee of dat gaat werken, ik werk normaal met Oracle en niet met MySQL.

Als je versie van MySQL subqueries in views niet ondersteund zou ik terug vallen op een stored procedure die stap voor stap dit in tussentabellen zet en dan de laatste stap in een view laat zien, of gewoon in een volgende tabel.
Verwijderd schreef op maandag 24 november 2008 @ 18:11:
ik heb nu deze query gemaakt

select *
from tblorder o, tblorderpayment op
left join tblorderpayment op2 on op.dentry > op2.dentry and op.norderid = op2.norderid
where o.norderid = op.norderid and o.norderid=15287 and op.dentry is not null


alleen dentry is nooit null (Staat altijd datum in) dus het klopt nog iet, krij gnu dus een record of 631 terug....


er zijn heel veel betaalrecords en hij filter dus nog niet de goede eruit ..
Ik snap je verwijzing naar niet leeg en teveel records terug niet.

☻/
/▌
/ \ Analyseert | Modelleert | Valideert | Solliciteert | Generaliseert | Procrastineert | Epibreert |

Pagina: 1