[mysql/php] dubbele select

Pagina: 1
Acties:

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
Ik heb in php deze query gemaakt, in mssql werkt het wel perfect maar in mysql niet. Hoe is dit optelossen, liefst in 1 query.

PHP:
1
2
3
4
5
6
$query ="SELECT poll_answer.answer, poll_question.question,
        (SELECT count(*) FROM poll_vote WHERE poll_vote.aid=poll_answer.aid)
        FROM poll_question
          INNER JOIN poll_answer on (poll_answer.qid=poll_question.qid)
          INNER JOIN poll_vote on (poll_vote.aid=poll_answer.aid)
        WHERE poll_question.qid=1";


You have an error in your SQL syntax near 'SELECT count(*) FROM poll_vote WHERE poll_vote.aid=poll_answer.aid) FRO' at line 2

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 10:19

D2k

subquerys kunnen niet

Doet iets met Cloud (MS/IBM)


Verwijderd

je zult er twee queries van moeten maken...

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
Dus moet ik het met 2 query's doen :'(

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Is dit niet op te lossen door een group by?? Volgens mij zou dit wel in 1 query moeten kunnen...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
Janoz schreef op 11 oktober 2002 @ 12:16:
Is dit niet op te lossen door een group by?? Volgens mij zou dit wel in 1 query moeten kunnen...
Ik heb al iets geprobeerd met een group by, maar helaas kom ik niet tot de oplossing. :'(

Krijg alleen de rijen terug die in poll_vote staan. Ik wil ze juist uit poll_answer.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En toch moet dit kunnen met een group by ala:
select ...., poll_answers.id, count(*)
from poll_answers
left join poll_vote on poll_answers.id = poll_vote.id
group by poll_answers.id

etc

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
ACM schreef op 11 oktober 2002 @ 12:48:
En toch moet dit kunnen met een group by ala:
select ...., poll_answers.id, count(*)
from poll_answers
left join poll_vote on poll_answers.id = poll_vote.id
group by poll_answers.id

etc
Bedankt voor de tip "left". Ik heb nu deze query en hij werkt :7

PHP:
1
2
3
4
5
6
$query = "SELECT poll_answer.answer,count(poll_vote.vid),poll_question.question
from poll_answer
left join poll_vote on poll_answer.aid = poll_vote.aid
INNER JOIN poll_question ON poll_answer.qid=poll_question.qid
WHERE poll_question.qid=$id
group by poll_answer.aid";

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Het gebruik van een subquery in je select-list is sowieso niet aan te raden, omdat dat zeer slechts is voor je performance.
Heb in MSSQL 7 wel eens stored procedures gezien, waarin ook een hele rij queries zat met verschillende subqueries in de select-list. Dat waren overigens wel wat complexere queries.
Maar deze bleken toch zonder subqueries te kunnen en plotseling was de stored procedure ook zo'n 25 keer zo snel geworden.

Never underestimate the power of


  • technocow
  • Registratie: Mei 2002
  • Laatst online: 26-06 22:17
beste en makkelijkste is om er 2 queries van te maken :P

en so what, dan heb je een xtr query...

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 18-08 21:00
Waarom? Nu werkt hij toch ook? Je moet niet altijd de makkelijkste weg bewandelen.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
technocow schreef op 11 oktober 2002 @ 13:59:
beste en makkelijkste is om er 2 queries van te maken :P

en so what, dan heb je een xtr query...
Ik zou eerder denken slechtste en alleen voor mensen die geen of weinig verstand van sql (willen) hebben. :'(

In dit geval zou het slechts twee queries zijn, maar als je nu eens een leuk rapportje wilt zien waarop meerdere polls staan met bijbehorend aantal reacties? Juist ja, dan heb je dus fijn voor elke poll een extra query nodig. Dan zit je het dus onnodig moeilijk en vooral traag te maken.

Never underestimate the power of


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

frankschers schreef op 11 oktober 2002 @ 13:25:
Bedankt voor de tip "left". Ik heb nu deze query en hij werkt :7
[/php]

Door het gebruik van de inner join ben je alleen een deel kwijt ;)
Namelijk die antwoorden waar geen vote op is. Als je een left (outer dus) join gebruikt gaat dat wel goed.
cameodski schreef op 11 oktober 2002 @ 13:27:
Het gebruik van een subquery in je select-list is sowieso niet aan te raden, omdat dat zeer slechts is voor je performance.
Heb in MSSQL 7 wel eens stored procedures gezien, waarin ook een hele rij queries zat met verschillende subqueries in de select-list. Dat waren overigens wel wat complexere queries.
Maar deze bleken toch zonder subqueries te kunnen en plotseling was de stored procedure ook zo'n 25 keer zo snel geworden.
Mja opzich is een subquery een vertragende factor, maar als je bijv een simpele query ala:
select .... where ... IN (select ...) en het blijkt dat die tweede select eigenlijk maar eenmalig uitgevoerd hoeft te worden dan zal bijv postgresql dat ook maar 1x doen.

Magoed, de impact op de performance hangt natuurlijk van je rdbms en nog meer van de gebruikte query af.
cameodski schreef op 11 oktober 2002 @ 14:06:
Ik zou eerder denken slechtste en alleen voor mensen die geen of weinig verstand van sql (willen) hebben. :'(

In dit geval zou het slechts twee queries zijn, maar als je nu eens een leuk rapportje wilt zien waarop meerdere polls staan met bijbehorend aantal reacties? Juist ja, dan heb je dus fijn voor elke poll een extra query nodig. Dan zit je het dus onnodig moeilijk en vooral traag te maken.
Meer queries is zeker niet perse slecht, zelfs niet als je per poll een extra query nodig hebt, hangt er vooral af hoe zwaar die losse queries zijn tov de grote.

Wellicht is het dan wel handig dat je die losse queries samen in een stored proc plant :)
Magoed, bij mysql is dat laatste iig niet mogelijk.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
ACM schreef op 11 oktober 2002 @ 16:24:
Mja opzich is een subquery een vertragende factor, maar als je bijv een simpele query ala:
select .... where ... IN (select ...) en het blijkt dat die tweede select eigenlijk maar eenmalig uitgevoerd hoeft te worden dan zal bijv postgresql dat ook maar 1x doen.
Inderdaad, zulke constructies zijn meestal/vaak sneller, maar ik had het dan ook over subqueries in de select-list. :)
Dus zoiets: select (select ...) as a from ... where ....
ACM schreef op 11 oktober 2002 @ 16:24:
Meer queries is zeker niet perse slecht, zelfs niet als je per poll een extra query nodig hebt, hangt er vooral af hoe zwaar die losse queries zijn tov de grote.
Dat ben ik dus niet met je eens. Meerdere queries betekent automatisch dat het RDBMS meerdere keren op de harde schijf dingen moet gaan zitten ophalen en als je eens wist hoeveel vertraging het lezen op de harde schijf oplevert.
Misschien dat je af en toe gelijk hebt, maar dat zal dan een uitzondering zijn.

Never underestimate the power of


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

cameodski schreef op 11 oktober 2002 @ 16:40:
Dat ben ik dus niet met je eens. Meerdere queries betekent automatisch dat het RDBMS meerdere keren op de harde schijf dingen moet gaan zitten ophalen en als je eens wist hoeveel vertraging het lezen op de harde schijf oplevert.
Misschien dat je af en toe gelijk hebt, maar dat zal dan een uitzondering zijn.

Bij alles in een query proppen kan het zijn dat je veel meer data door moet worstelen ofzo, of dat je hele andere acties uitvoert op die data, of dat er stiekem toch dezelfde handelingen gedaan worden.
Vergeet daarnaast niet de werking van de caches ;)

Kortom het is niet per definitie zo dat meerdere queries slecht is, dat het vaak beter is om het in een query te doen (zeker als je anders 4x vrijwel hetzelfde doet ofzo) is wat anders :)
Pagina: 1