[mySQL] Data uit 2 tables (1 query?) adhv data uit 1e table

Pagina: 1
Acties:

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Ik ben niet echt, wat je noemt, een echte superheld .. in mySQL
.. maar ik heb al behoorlijk wat dingetjes geprobeerd maar kom er echt niet uit:

table_1:
intIndex varData1 varData2
1 henk 2
2 kees 1
3 kees 2

table_2:
intIndex varData1 varData2 varExtra varInfo
5 jan 2 true blaat
6 kees 1 true kip
7 kees 3 true melp


Nu moet het alle data uit table 1 zowiezo geselecteerd worden, maar als de gegevens 'varData1' en 'varData2' overeenstemmen met de velden uit table_2, moet de data uit varExtra en varInfo toegevoegd worden aan het resultaat.

Het gaat hier om de data die via mysql_query() in een phpobject moet worden gaan gestopt en dan als xmloutput tevoorschijn moet gaan komen. Het maken van erg veel query's zou ik dus het liefst willen vermijden ivm de snelheid (wat voor mij een heel belangrijk onderdeel is bij dit scriptje)

zoiets heb ik al geprobeerd, maar wou niet echt werken :'(
code:
1
2
3
SELECT * FROM table_1 t1, table_2 t2
     WHERE t1.varData1 = 'kees' 
          AND t2.varData1 = t1.varData1 AND t2.varData2 = t1.varData2

[ Voor 13% gewijzigd door r0bert op 23-11-2002 15:36 ]


  • Anders
  • Registratie: December 2000
  • Laatst online: 24-08 18:29
SELECT t1.indIndex, t1.varData1, t1.varData2, t2.varExtra, t2.varInfo FROM table_1 as t1, table_2 as t2 WHERE t1.varData1 = t2.varData1 AND t1.varData2 = t2.varData2

Een andere weg die naar Rome leidt, is die met een JOIN-statement in je query. Zie http://www.mysql.com/doc/en/JOIN.html

Probeer SELECT * altijd te vermijden: mocht je ooit een kolom toevoegen met veel data (blob met plaatjes erin bv) dan wordt die ook automatisch mee opgehaald. Benoem altijd de kolommen die je op wilt halen.

Ik spoor veilig of ik spoor niet.


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Thanks, volgens mij gaat het met die SELECT wel lukken, maar ik zal me ook nog even verdiepen in JOIN, misschien dat het nog van pas komt..

edit:
Ik snap trouwens nog steeds niet waarom mijn query niet werkte :?


Kom er toch nog niet helemaal uit.. Nu wordt dus alleen de data uit TABLE 1 gegeven in het resultaat als deze ook in TABLE 2 bestaat.. maar de data uit TABLE 1 moet altijd in het resultaat komen en de data uit TABLE 2 moet daaraantoegevoegd worden ALS die data overeenkomt met die uit TABLE 1.....

ben nog even bezig met dat JOIN gedoe te lezen, misschien dat ik daar nog iets in tegenkom

[ Voor 74% gewijzigd door r0bert op 23-11-2002 15:56 ]


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Misschien op deze manier?

code:
1
2
3
4
5
SELECT *
FROM table_1 t1
LEFT JOIN table_2 t2 ON t1.varData1 = t2.varData1
LEFT JOIN table_2 t3 ON t1.varData2 = t2.varData2
WHERE t1.varData1 = 'kees'

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Kun je niet beter AND gebruiken in plaats van twee JOINs?

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
robjanssen schreef op 23 November 2002 @ 15:56:
Misschien op deze manier?

code:
1
2
3
4
5
SELECT *
FROM table_1 t1
LEFT JOIN table_2 t2 ON t1.varData1 = t2.varData1
LEFT JOIN table_2 t3 ON t1.varData2 = t2.varData2
WHERE t1.varData1 = 'kees'
Dat lijkt inderdaad goed te werken! nog even wat knutselen, maar ik denk wel dat het lukt.. zo niet, dan post ik nog wel even een reply.!

danku! :)

edit:
En ik gebruik idd AND

Prutst nog even rustig door
bij mij werkt het volgens mij prima ..!

[ Voor 17% gewijzigd door r0bert op 23-11-2002 16:07 ]


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Kun je niet beter AND gebruiken in plaats van twee JOINs?
Dan moet je toch ook twee ANDs gebruiken?
En dan is het ook nog zo dat als je 2 ANDs gebruikt, en er is geen record in table_2 wat overeenkomt met varData1 EN varData2 uit table_1, dan geeft hij geen resultaat terug. Dus ook niet wat er in table_1 staat.

[ Voor 15% gewijzigd door robjanssen op 23-11-2002 16:02 ]


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
robjanssen schreef op 23 november 2002 @ 16:01:
[...]

Dan moet je toch ook twee ANDs gebruiken?
En dan is het ook nog zo dat als je 2 ANDs gebruikt, en er is geen record in table_2 wat overeenkomt met varData1 EN varData2 uit table_1, dan geeft hij geen resultaat terug. Dus ook niet wat er in table_1 staat.
Ik dacht aan:
code:
1
2
3
4
SELECT *
FROM table_1 t1
LEFT JOIN table_2 t2 ON t1.varData1 = t2.varData1 AND t1.varData2 = t2.varData2
WHERE t1.varData1 = 'kees'

t3 gebruik je toch al niet.

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

OlafvdSpek schreef op 23 november 2002 @ 16:05:
[...]

Ik dacht aan:
code:
1
2
3
4
SELECT *
FROM table_1 t1
LEFT JOIN table_2 t2 ON t1.varData1 = t2.varData1 AND t1.varData2 = t2.varData2
WHERE t1.varData1 = 'kees'

t3 gebruik je toch al niet.
Ow op zo'n manier. Ja die is inderdaad wel beter denk ik.
Ik had je verkeerd begrepen, ik dacht dat je het zonder een LEFT JOIN wilde doen, maar je wilt maar 1 LEFT JOIN gebruiken in plaats van 2.
Pagina: 1