Helpdesk
Menschen Wissenschaft Politik Mystery Kriminalfälle Spiritualität Verschwörungen Technologie Ufologie Natur Umfragen Unterhaltung
weitere Rubriken
PhilosophieTräumeOrteEsoterikLiteraturAstronomieHelpdeskGruppenGamingFilmeMusikClashVerbesserungenAllmysteryEnglish
Diskussions-Übersichten
BesuchtTeilgenommenAlleNeueGeschlossenLesenswertSchlüsselwörter
Schiebe oft benutzte Tabs in die Navigationsleiste (zurücksetzen).

Programmieren: Hilfe & Austausch

920 Beiträge ▪ Schlüsselwörter: Programm, Code, Html ▪ Abonnieren: Feed E-Mail

Programmieren: Hilfe & Austausch

14.09.2012 um 19:15
@AnGSt


Oder

Select "name" From "tabelle1" where "tabelle2.a" != null and "tabelle2.b" != null


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

14.09.2012 um 19:16
Zitat von interpreterinterpreter schrieb:so ein bisschen wie Tetris.
hoho, lol, ich blicks noch nicht was du da empfiehlst, warum das funzt und so.


melden

Programmieren: Hilfe & Austausch

14.09.2012 um 19:19
@AnGSt

Es funktioniert?


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

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.


melden

Programmieren: Hilfe & Austausch

14.09.2012 um 19:20
@AnGSt
Dann teste es oder ignoriers :D

Das zweite könnte klappen.


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

14.09.2012 um 19:22
Nein, ich sehe nicht wie und warum die Tabelle 2 in Deinem zweiten Beispiel überhaupt als Zusammenhängend mit 1 genommen wird.


melden

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.


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

14.09.2012 um 19:26
Die 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


melden

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.


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

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 ^^


melden

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.


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

14.09.2012 um 19:46
Es 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.


melden

Programmieren: Hilfe & Austausch

14.09.2012 um 20:14
Die 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.


melden

Programmieren: Hilfe & Austausch

14.09.2012 um 20:16
@AnGSt

eher

INNER JOIN COMMONS C2 ON (RC.TagID = C1.ID AND C1.Typ =2)


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

14.09.2012 um 20:19
warum inner? bezieht sich das dann auf die kombi von C1 und C2? Warum nicht = auch C2.ID und C2.Typ in der on klausel?


melden

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...


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

14.09.2012 um 20:22
ok, time to try now :)


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

14.09.2012 um 20:40
Hmm, 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


melden

Programmieren: Hilfe & Austausch

14.09.2012 um 20:42
verwandel mal alle Joins in OUTER JOINS und schränke dann schritt für Schritt ein


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

14.09.2012 um 20:43
Was habe ich davon? Und wie einschränken? @interpreter


melden