[MySQL]Join geeft empty result

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Tha_Butcha
  • Registratie: November 2000
  • Laatst online: 20-01 18:05
Ik ben weer begonnen met wat coden voor de hobby en ben een woordenboek aan het bouwen. Omdat er meerdere talen in moeten komen had ik bedacht dat het misschien wel handig is om voor elke taal een table aan te maken ipv als row toe te voegen aan een entry.

Alleen als ik de volgende code uitvoer kreeg ik helemaal niks terug:

code:
1
2
3
4
5
6
7
8
SELECT nmEntry, idEN
    FROM tbl_Entry, tbl_Translation
    WHERE tbl_Entry.idEntry = tbl_Translation.entryID;

SELECT nmEntry, entryEN
    FROM tbl_Entry, tbl_Translation, tbl_EN
    WHERE tbl_Entry.idEntry = tbl_Translation.entryID
    AND tbl_EN.idEN = tbl_Translation.idEN;


Opzet DB:

code:
1
2
3
4
5
6
7
8
9
10
11
tbl_Entry
  idEntry   int,
  nmEntry  varchar(30)

tbl_Translation
entryID FK,
idEN   FK

tbl_EN
  idEN   int,
  entry  varchar(30)


tbl_Translation.entryID verwijst dus als foreign key naar tbl_Entry.idEntry en tbl_Translation.idEN als foreign key naar tbl_En.idEN.

Waar ga ik hier de mist in?

Compromises are for the weak


Acties:
  • 0 Henk 'm!

  • sub0kelvin
  • Registratie: September 2002
  • Laatst online: 10-08-2023
Tha_Butcha schreef op zondag 21 april 2013 @ 16:46:
Omdat er meerdere talen in moeten komen had ik bedacht dat het misschien wel handig is om voor elke taal een table aan te maken ipv als row toe te voegen aan een entry.
Dat lijkt me juist _niet_ handig, omdat je structuur nu afhankelijk is van je data. Zodra er een taal (= data) bij komt moet je structuur wijzigen: een nieuwe tabel en een kolom in tbl_translation (idFR, idNL, etc). Dat is een teken dat je de database niet goed genormaliseerd hebt.

Wat je wil is een tabel met al je talen (tbl_language) en dan een FK leggen tussen tbl_translation en de gewenste taal.

Ik denk dat je dan ook al snel ziet dat de query ook makkelijker wordt. Als je standaard al de taal_id beschikbaar hebt, bijvoorbeeld in je sessie, hoef je voor het vinden van de juiste vertaling niet in de tbl_language te zijn. Dan is het dus gewoon een join tussen tbl_entry en tbl_vertaling on entry_id, met een where op language_id.

Acties:
  • 0 Henk 'm!

  • Tha_Butcha
  • Registratie: November 2000
  • Laatst online: 20-01 18:05
sub0kelvin schreef op zondag 21 april 2013 @ 17:03:
[...]

Dat lijkt me juist _niet_ handig, omdat je structuur nu afhankelijk is van je data. Zodra er een taal (= data) bij komt moet je structuur wijzigen: een nieuwe tabel en een kolom in tbl_translation (idFR, idNL, etc). Dat is een teken dat je de database niet goed genormaliseerd hebt.
Voor 1 nieuwe taal moet ik één extra table en één extra kolom toevoeg leek mij niet zoveel werk. Zeker als ik nog dingen aan die entry zou willen toevoegen (categorieen, plaatjes e.d.) dan leek deze mij het meest stabiel
Wat je wil is een tabel met al je talen (tbl_language) en dan een FK leggen tussen tbl_translation en de gewenste taal.
Bedoel je dan maar 2 tables of 4? Ik volg je nu even niet meer.

Ow wacht, ik heb hem al geloof ik, zoals in dit voorbeeld, optie nummer drie?

edit: opgelost
Bam! Eindelijk opgelost! Heb nu inderdaad nog een table toegevoegd met de language (en categorieen aangezien ik toch bezig was). Heb me gebaseerd op dit model.

[ Voor 21% gewijzigd door Tha_Butcha op 21-04-2013 22:02 . Reden: oplossing gevonden ]

Compromises are for the weak