Toon posts:

[MYSQL] geen sub query

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi ... heb de volgende tabellen met velden

PAGES
- page_id (int)
- tree_id (int)

CONTENT
- content_page_id (int)
- language_id (int)

Nu heb ik volgende records bij tabel PAGES

page_idtree_id
11
21
32


en volgende records bij CONTENT


content_page_idlanguage_id
11
12
21
31



Nu wou ik een sub selectie doen met :

SELECT * FROM content WHERE content_page_id IN (SELECT page_id FROM pages WHERE tree_id =1
) AND language_id=1


ik zou dan theoretisch de volgende records krijgen

content_page_idlanguage_id
11
21



Maar toen kwam ik er achter dat mijn versie van Mysql geen sub selectie ondersteunde en ik weet ook niet zeker van mijn hosting server.

Dus ik probeer dit zonder sub-query te doen.

Weet iemand hier een oplossing voor?

[ Voor 28% gewijzigd door Verwijderd op 09-06-2004 00:54 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Uh kun je wellicht met [table], [td] en [tr] tags je data iets inzichtelijker maken, en [code=sql] en [/code] om je SQL-code zetten? Zo is er geen touw aan vast te knopen zo snel :X

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Als ik me niet vergis zoek je:
SQL:
1
2
3
4
5
select content_page_id, language_id 
from content
join pages on content_page_id = page_id
where tree_id = 1
and language_id = 1;

Wellicht tijd voor basiscursusje joins? :)

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 09 juni 2004 @ 00:50:
Als ik me niet vergis zoek je:
SQL:
1
2
3
4
5
select content_page_id, language_id 
from content
join pages on content_page_id = page_id
where tree_id = 1
and language_id = 1;

Wellicht tijd voor basiscursusje joins? :)
WOW ... ja man ... dat was um ... ik was al aan het klote geweest met joins .. maar snapte geen klote van ... THNX ....

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 09 juni 2004 @ 00:58:
[...]

WOW ... ja man ... dat was um ... ik was al aan het klote geweest met joins .. maar snapte geen klote van ... THNX ....
Wat jij met die subquery aan het doen was is 'rowbased thinking', oftewel klassiek programmeergericht denken. Dat is iets wat je met SQL heel hard af moet leren, daar moet je 'setbased' denken.

In jouw versie deed je een full table scan van Pages, en voor iedere row een full table scan van Content. Dat is duidelijk de programmeergerichte aanpak: loop over de regels en zoek of ze correct zijn erbij.

De aanpak met de joins loopt in tandem over beide tabellen (uitgaande van nette primary/foreign key relaties) en scant dus iedere tabel maar 1 keer, hoe groot de tabellen ook zijn. Dat is set-based thinking, en scheelt je op grotere tabellen als dit tientallen malen op snelheid.

Gouden regel: vrijwel iedere subquery kun je vervangen door een creatieve join. Zeker als je pas net begint is deze regel altijd geldig ;)

Professionele website nodig?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

offtopic:
Toch vreemd hoe verschillende mensen de verschillende combinatiemethoden van records toch anders ervaren. Toen ik net SQL leerde had ik juist problemen met subqueries, die zagen er veel vager uit. Intussen weet ik gelukkig van beiden de waarden in te schatten, maar het valt me op dat het bij de meeste mensen toch anders is en ze eerder subselects snappen dan een simpele join. Ben ik nou zo apart? 8)7

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1