Programmieren: Hilfe & Austausch
Programmieren: Hilfe & Austausch
14.09.2012 um 19:16interpreter schrieb:so ein bisschen wie Tetris.hoho, lol, ich blicks noch nicht was du da empfiehlst, warum das funzt und so.
Programmieren: Hilfe & Austausch
14.09.2012 um 19:19@interpreter
Eh, nein, das wollte ich nicht sagen. Ich kanns bloß nicht nachvollziehen. Sieht falsch aus.
Eh, nein, das wollte ich nicht sagen. Ich kanns bloß nicht nachvollziehen. Sieht falsch aus.
Programmieren: Hilfe & Austausch
14.09.2012 um 19:20Programmieren: Hilfe & Austausch
14.09.2012 um 19:22Nein, ich sehe nicht wie und warum die Tabelle 2 in Deinem zweiten Beispiel überhaupt als Zusammenhängend mit 1 genommen wird.
Programmieren: Hilfe & Austausch
14.09.2012 um 19:24@AnGSt
Du sagtest das die Tabellen verknüpft sind. Verknüpfte Tabellen sind bei SQL im Grunde wie mehrdimensionale einzelne Tabellen.
Du sagtest das die Tabellen verknüpft sind. Verknüpfte Tabellen sind bei SQL im Grunde wie mehrdimensionale einzelne Tabellen.
Programmieren: Hilfe & Austausch
14.09.2012 um 19:26Die Verknüpfung muss aber extra im Query angegeben werden via JOIN oder so. An sich kenne ich darüber hinaus nur Foreign Keys als in den Tabellen selbst definierten Verknüpfugen, die habe ich aber nicht und brauche auch nicht.
@interpreter
@interpreter
Programmieren: Hilfe & Austausch
14.09.2012 um 19:32@AnGSt
Die Verknüpfungen sind NICHT ind er Tabelle festverdrahtet?
Dann musst du deine Tabelle mit JOIN zusammenfügen und die zusammengefügte Tabelle als Basis für eine Abfrage verwenden.
Die Verknüpfungen sind NICHT ind er Tabelle festverdrahtet?
Dann musst du deine Tabelle mit JOIN zusammenfügen und die zusammengefügte Tabelle als Basis für eine Abfrage verwenden.
Programmieren: Hilfe & Austausch
14.09.2012 um 19:33@interpreter
Sind nicht fest verdrahtet. JOIN, sag ich doch, weiss aber nicht welcher und wie dann abfragen ^^
Sind nicht fest verdrahtet. JOIN, sag ich doch, weiss aber nicht welcher und wie dann abfragen ^^
Programmieren: Hilfe & Austausch
14.09.2012 um 19:40@AnGSt
Wie hast du denn die Beziehung zwischen den Tabellen definiert? ich mein es muss ja ne ID oder sowas geben die Felder kennzeichnet, die aufeinander bezogen sind.
Wie hast du denn die Beziehung zwischen den Tabellen definiert? ich mein es muss ja ne ID oder sowas geben die Felder kennzeichnet, die aufeinander bezogen sind.
Programmieren: Hilfe & Austausch
14.09.2012 um 19:46Es geht um die Tabelle RELEASES und die Tabelle COMMONS. Die sind über RELEASE_COMMONS m:n verknüpft, indem in RELEASE_COMMONS jede Zeile aus einer RELEASES.ID und einer COMMONS.ID besteht. Über LEFT JOIN funktioniert die Abfrage eines Datensatzes aus RELEASES, der über n:m in COMMONS einen Datensatz mit COMMONS.Typ = 1 hat wunderbar:
SELECT R1.ID FROM RELEASES R1
LEFT JOIN RELEASE_COMMONS RC ON R1.ID = ReleaseID
LEFT JOIN COMMONS C1 ON (RC.TagID = C1.ID AND C1.Typ = 1)
Was fehlt ist, ob R1 auch zusätzlich einen Satz mit Typ = 2 in COMMONS hat. Also 1 und 2.
SELECT R1.ID FROM RELEASES R1
LEFT JOIN RELEASE_COMMONS RC ON R1.ID = ReleaseID
LEFT JOIN COMMONS C1 ON (RC.TagID = C1.ID AND C1.Typ = 1)
Was fehlt ist, ob R1 auch zusätzlich einen Satz mit Typ = 2 in COMMONS hat. Also 1 und 2.
Programmieren: Hilfe & Austausch
14.09.2012 um 20:14Die ursprünglich Tabelle allgemeiner abfragen ( So das die Einträge unabhängig vom Typ eingefügt werden) und dann verschachteln und nach dem Typ Fragen
verschiedene Datensätze in verschiedene Spalten...
Dann die Tabelle als Basis für ne weitere Abfrage verwenden...
ODER du fügst unten noch ein
INNER JOIN COMMONS C1 ON (RC.TagID = C1.ID AND C1.Typ =2)
hinzu... also das du mit Commons zweimal verknüpfst.
verschiedene Datensätze in verschiedene Spalten...
Dann die Tabelle als Basis für ne weitere Abfrage verwenden...
ODER du fügst unten noch ein
INNER JOIN COMMONS C1 ON (RC.TagID = C1.ID AND C1.Typ =2)
hinzu... also das du mit Commons zweimal verknüpfst.
Programmieren: Hilfe & Austausch
14.09.2012 um 20:16Programmieren: Hilfe & Austausch
14.09.2012 um 20:19warum inner? bezieht sich das dann auf die kombi von C1 und C2? Warum nicht = auch C2.ID und C2.Typ in der on klausel?
Programmieren: Hilfe & Austausch
14.09.2012 um 20:21@AnGSt
natürlich C2.ID und C2.Typ in der Klausel... hatte das nicht vollständig korrigiert :D
Ja, das bezieht sich dann auf Datensätze die ausdrücklich in BEIDEN vorher vorhandenen Tabellen abgelegt sind... also die Schnittmenge...
natürlich C2.ID und C2.Typ in der Klausel... hatte das nicht vollständig korrigiert :D
Ja, das bezieht sich dann auf Datensätze die ausdrücklich in BEIDEN vorher vorhandenen Tabellen abgelegt sind... also die Schnittmenge...
Programmieren: Hilfe & Austausch
14.09.2012 um 20:22ok, time to try now :)
Programmieren: Hilfe & Austausch
14.09.2012 um 20:40Hmm, funktioniert noch nicht. Datensätze, die überhaupt keine Entsprechung in COMMONS haben, werden nicht angezeigt, auch wenn über die WHERE Klausel keine Einschränkung auf einen bestimmten Datensatz aus COMMONS steht.
$where_array = array();
foreach ($words_array as $word) {
$where_array[] = "(NAMES.Name LIKE '%$word%' OR FILES.FileLink LIKE '%$word%' OR C1.Name LIKE '%$word%' OR CX.Name LIKE '%$word%' OR R1.Title LIKE '%$word%' OR R1.SubTitle LIKE '%$word%' OR DATE_FORMAT(R1.Date, '%Y') LIKE '%$word' OR R2.Title LIKE '%$word%' OR C2.Name LIKE '%$word%')";
}
if ($_GET['cat']) $where_array[] = "C1.ID = ".$_GET['cat'];
if ($_GET['tag']) $where_array[] = "(CT.ID = ".$_GET['tag'];
//$where_array[] = "Typ IN (".CMN_CLASS.")"; w/o this line CLASSES, TAGS, EFECTS, FAMILIES and none (IS NULL) apply
$where_string = implode(" AND ",$where_array);
SELECT R1.ID FROM RELEASES R1
LEFT JOIN RELEASE_COMMONS RC ON R1.ID = ReleaseID
LEFT JOIN COMMONS C1 ON (RC.TagID = C1.ID AND C1.Typ = ".CMN_CLASS.")
INNER JOIN COMMONS CT ON (RC.TagID = CT.ID AND CT.Typ = ".CMN_TAG.")
LEFT JOIN COMMONS CX ON RC.TagID = CX.ID
LEFT JOIN FILES ON FILES.ReleaseID = R1.ID
LEFT JOIN CREDITS ON CREDITS.ReleaseID = R1.ID LEFT JOIN AUTHORS ON AUTHORS.ID = CREDITS.AuthorID
LEFT JOIN NAMES ON NAMES.AuthorID = AUTHORS.ID
LEFT JOIN RELEASES R2 ON R1.SoundFormatID = R2.ID
LEFT JOIN COMMONS C2 ON R1.series_id = C2.ID
WHERE $where_string GROUP BY R1.ID $sort_string LIMIT $start,$show
Programmieren: Hilfe & Austausch
14.09.2012 um 20:42verwandel mal alle Joins in OUTER JOINS und schränke dann schritt für Schritt ein