[SQL] Select uit 3 tabellen

Pagina: 1
Acties:

  • megamuch
  • Registratie: Februari 2001
  • Laatst online: 29-01 20:14

megamuch

Tring Tring!

Topicstarter
situatie:

3 tabellen:

Man
layout:
id, username, password, specs, fotopath, scoretotal, totalvotes, email, active

Reactieman
layout:
reactieid, voorusername, vanusername, emailreactie, reactie

Totalidman
layout:
totalidman

wat wil ik doen :

Ik wil altijd de laatst toegevoegde persoon als eerste laten zien En daarvoor wil ik niet eerst de complete tabel "man" door lopen. Vandaar dus ook die derde tabel "totalidman". Die bevat in feite het aantal records wat in tabel man staat. Misschien overbodig, maar zo is de situatie nou eenmaal :)

Anyway, ik wil dus altijd als eerste de laatst toegevoegde persoon laten zien. Tevens wil ik eventuele reacties voor deze persoon laten zien.

Total nu toe ben ik tot het volgende gekomen:

[sql]

Select man.*, reactieman.*, totalidman.* from man, reactieman, totalidman where (totalidman.totalidman = man.id) and (reactieman.voorusername= man.username)

[/sql]
Dit werkt aardig als er inderdaad een reactie voor username is. Is die er niet dan zijn er dus geen records en dus geen resultaten. Gevolg een lege pagina.

Hoe zorg ik nou dat als die 2e clausule (reactieman.voorusername= man.username) leeg is, ik toch het eerste gedeelte terug krijg.

Ik moet waarschijnlijk die and (reactieman.voorusername= man.username) vervangen door wat anders maar ik heb echt geen idee hoe ik dat zou moeten doen.

In de Mysql manual zie ik dat ze af en toe joins gebruiken, echter mijn kennis daarvan is zeer beperkt en ik kan het ook niet naar "normale mensentaal" vertalen.

Wie o wie zou hiermee kunnen helpen?

p.s. Union is geen optie aangezien dat pas vanaf 4.0 ondersteund wordt. en ik gebruik nog steeds mysql 3.23.X

Verstand van Voip? Ik heb een leuke baan voor je!


Verwijderd

gebruik een limit en een sortorder .....
en ik kan je verder aanraden om toch id's te gebruiken om tabellen te joinen in plaats van usernames....

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

megamuch schreef op 15 December 2002 @ 20:20:
Hoe zorg ik nou dat als die 2e clausule (reactieman.voorusername= man.username) leeg is, ik toch het eerste gedeelte terug krijg.

[knip]

In de Mysql manual zie ik dat ze af en toe joins gebruiken, echter mijn kennis daarvan is zeer beperkt en ik kan het ook niet naar "normale mensentaal" vertalen.
Wat jij in je poging doet is ook gewoon een join (alleen dan in een andere notatie). En iets specifieker, je doet een zgn. INNER JOIN. Een ander type JOIN is de (LEFT/RIGHT) OUTER JOIN. Als je begrijpt wat het verschil is tussen deze twee heb je meteen een antwoord op je vraag. Bijna elke sql tutorial behandeld dit wel, bijvoorbeeld hier.

Today's subliminal thought is:


  • cimbom
  • Registratie: Juni 2001
  • Laatst online: 26-04-2024

cimbom

Just Kidding

Mar zoals hierboven gezegd. Je moet iets met left/right outer join doen. In jouw stijl kun je dat realiseren met een sterretje.

[sql]
Select man.*, reactieman.*, totalidman.* from man, reactieman, totalidman where (totalidman.totalidman = man.id) and (reactieman.voorusername* = man.username)
[/sql]

edit:

Ik weet niet welke SQL server je gebruikt.. Maar sterretje zoals hierboven betekend (dacht ik) left outer join ( anders is het right outer join) in SQLServer

[ Voor 23% gewijzigd door cimbom op 16-12-2002 16:09 ]


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

zie http://www.mysql.com/doc/en/JOIN.html
Hier zie je de specificaties van de LEFT [OUTER] JOIN die jij nodig hebt, succes!
Lees dit aandachtig door, dat helpt heel erg.