Hallo,
Also: Ich habe zwei Tabellen in MySQL:
texte
ID | Text | Quelle1 | abc | 1
2 | def | 2
3 | ghi | 3
quellen
QID | Quellenname1 | Amazon
2 | Ebay
3 | Rebuy
Wenn ich die jetzt mit meinem laienhaften Wissen verknüpfe, funktioniert das ganz gut.
$sql = "SELECT * FROM texte a, quelle q WHERE a.id = q.qid ORDER BY qid DESC";
Naja, explizite Joins sind einfach viel schöner und klarer:
~~~sql
SELECT
*
FROM
texte t -- besserer Aliasname als "a"
INNER JOIN
quellen q
ON
a.Quelle = q.QID -- ist vermutlich richtiger als Dein a.id :-)
ORDER BY
qid DESC
Ich hielt es für angebracht, das über zwei Tabellen zu lösen und bin, wie gesagt, noch im "Laien-Modus" :-). Sollte es dafür also eine bessere Lösung geben, bitte ich dies zu entschuldigen. Zurück zum Thema...
zwei Tabellen sind in dem Fall, dass es genau eine Quelle gibt, durchaus richtig.
Wie muss denn meine Abfrage aussehen, wenn sich meine Quelle auf 1;2 verändert, also mehr als eine Quelle angegeben ist...
wenn es zu jedem Text mehr als eine Quelle geben kann und jede Quelle mehr als einem Text zugeordnet werden kann, dann hast Du eine n:m-Beziehung und benötigst in den üblichen DBMS eine Verknüpfungstabelle. Es ist gar keine gute Idee, die Daten *nicht* atomar abzulegen.
texte
ID | Text |1 | abc |
2 | def |
3 | ghi |
text_quellen
id_text | id_quelle
-------------------
1 | 1
1 | 2
2 | 1
2 | 2
2 | 3
3 | 1
3 | 3
Die Zuordnung von Texten und Quellen erhältst Du nun über zwei Joins:
SELECT
t.id,
t.text,
q.QID,
q.Quellenname
FROM
texte t
INNER JOIN
text_quellen tq
ON
t.id = tq.id_text
INNER JOIN
quellen q
ON
tq.id_quelle = q.QID
Das ist die ultimative Lösung.
Lesetipps:
Einführung in Joins
Fortgeschrittene Jointechniken
Freundliche Grüße
Vinzenz