Toon posts:

[MySQL] 3 joins uit 2 tables

Pagina: 1
Acties:

Verwijderd

Topicstarter
code:
1
2
3
4
tabel1_id   tabel2_id1   tabel2_id2
-----------------------------------
1           1            2
2           8            9

code:
1
2
3
4
5
6
tabel2_id   tabel2_omschrijving
-------------------------------
1           hallo1
2           hallo2
8           hallo8
9           hallo9

Wat ik nu wil hebben is het volgende:
code:
1
2
3
tabel1_id   tabel2_id1   tabel2_id2   test1.tabel2_omschrijving   test2.tabel2_omschrijving
-------------------------------------------------------------------------------------------
2           8            9            hallo8                      hallo9

Ik had bedacht dit te realiseren op de volgende manier:
code:
1
2
3
4
SELECT * 
FROM tabel1, tabel2 AS test1, tabel2 AS test2
WHERE tabel1_id = '2' AND tabel1.tabel1_id = test1.tabel2_id AND
tabel1.tabel2_id = test2.tabel2_id

Alleen nu stuit ik op de 2 volgende problemen:

1. De resultaten in 'tabel2_omschrijving' krijgt geen identifiër; dus wanneer ik dan bijvoorbeeld $row[tabel2_omschrijving aanroep, krijg ik één van de beide resultaten terug. En dus niet de waarde als $row[test1.tabel2_omschrijving] en $row[test2.tabel2_omschrijving].

2. De waarden in tabel1.tabel2_id1 en tabel.tabel2_id2 zijn niet verplicht. Wanneer een van de velden leeg is; retourneert mysql geen data terug. Terwijl ik dat wel wil hebben...

Iemand een idee hoe ik 3 joins kan doen op 2 tabellen? En dan toch de juiste gegevens terug krijg?

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 20:58
Kun je niet beter gewoon een koppeltabel gebruiken? Dan kun je oneindig veel dingen aan elkaar koppelen. In die tabel zet je dus de velden id, id_table1 en id_table2

Verwijderd

Zoek eens op left join in de mysql documentatie.

Verwijderd

Topicstarter
Ik heb me de afgelopen uren verdiept in LEFT JOIN. Het is precies wat ik zoek! Ik blijf echter nog met 1 ding zitten...

De door MySQL geretourneerde array is alleen te gebruiken als nummerieke array. Indien er gebruik wordt gemaakt van een associative array (array op basis van veldnamen), dan overschrijven de 2 herhalende waarden elkaar omdat ze immers dezelfde naam hebben.:

$record = mysql_fetch_array($result, MYSQL_ASSOC); -> WERKT NIET!
$record = mysql_fetch_array($result, MYSQL_NUM); -> WERKT WEL!

Ik werk uitsluitend met ASSOC, omdat je dan zonder problemen een veld in je database in kan voegen op de plek die je wilt. met NUM kan dat niet, want dan moet je alle code weer controleren.

Iemand een idee om toch MYSQL_ASSOC te kunnen gebruiken??

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 19-05 09:52

thomaske

» » » » » »

Je kan ook veldnamen 'hernoemen' in je query:
code:
1
2
3
4
5
6
7
SELECT 
    tbl1.table1_id as id_1
,   tbl2.table1_id as id_2
FROM
    tbl1
,   tbl2
etc..

[ Voor 11% gewijzigd door thomaske op 11-02-2004 00:05 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Verwijderd schreef op 10 februari 2004 @ 18:27:
Iemand een idee hoe ik 3 joins kan doen op 2 tabellen? En dan toch de juiste gegevens terug krijg?
Niet.

Wat je wel kunt doen is een join over 3 tabellen, dat er toevallig 2 tabellen dezelfde tabel zijn is een tweede. Moet je wel AS gebruiken in je from gedeelte.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
De oplossing bleek een combinatie tussen LEFT JOIN en AS...

Ik dacht, ik laat het even weten voor diegene die het ooit ook nodig heeft :)
Pagina: 1