Seite 1 von 1
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 15:33
von Daniela
Hallo,
ich habe hier ein kleines Problem. Meine MySQL-Kenntnisse sind eher schwach, deshalb bitte nicht wegen jedem kleinen Fehler runtermachen.
Ich habe 2 Tabellen:
- Tabelle "hosts" mit Feldern "id" (INT) und "hostname" (VARCHAR)
- Tabelle "pings" mit Feldern "id" (INT), "h_id" (INT) und "online" (ENUM(0,1))
"h_id" bezieht sich auf die "hosts.id"
Nun möchte ich alle hostnames die entweder online = 0 sind oder in der pings-Tabelle noch gar keinen Eintrag haben.
Probiert habe ich es folgendermaßen:
Code: Alles auswählen
SELECT * FROM hosts LEFT JOIN pings ON hosts.id = pings.id WHERE pings.online = '0' OR pings.online = NULL
Da bekomme ich jedoch nur die Datensätze zurück die online = 0 sind - die bei denen in der pings-Tabelle gar nichts vorhanden ist fehlen.
Bitte helft mir auf die Sprünge...
Dankeschön, Daniela
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 06.11.2005, 16:22
von Fox Mulder
Da ich Join eigentlich nie nutze würde ich es so machen:
SELECT * FROM hosts, pings WHERE (pings.online = '0' OR pings.online = NULL) AND hosts.id = pings.id
Gruss
Verfasst: 06.11.2005, 16:38
von net(t)worker
Fox Mulder hat geschrieben:Da ich Join eigentlich nie nutze würde ich es so machen:
SELECT * FROM hosts, pings WHERE (pings.online = '0' OR pings.online = NULL) AND hosts.id = pings.id
Gruss

auch das ist ein Join....
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 16:44
von Daniela
Ein sogenannter EQUI-JOIN wäre das ja. Funktioniert aber nur wenn jeder hosts.id ein pings.h_id entspricht - und das ist ja eben NICHT der Fall. Es kann sein dass es in pings gar keine Zeile gibt mit der passenden id. Deshalb auch der LEFT JOIN - da wird die Tabelle rechts mit NULL aufgefüllt. Nur weiss ich nciht wie ich darauf dann auswähle...
Also nochmal um das klar zu machen:
Nicht jeder Eintrag in der "hosts"-Tabelle hat einen passenden Eintrag in der "pings"-Tabelle. Aber genau von diesen Einträgen (und bei denen pings.online = 0) brauche ich die ID.
Verfasst: 06.11.2005, 18:08
von magadoo
Spontan fällt mir das ein:
Code: Alles auswählen
SELECT * FROM hosts LEFT JOIN pings ON hosts.id = pings.h_id WHERE pings.online = '0' OR pings.id is NULL
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 18:18
von Daniela
Call me Supermega-Depp.
"is NULL" statt "= NULL" muss es natürlich heißen - und schon funktioniert es.
AHHHHHH &§$&§&%$ &% &% §&% &%§$ &%$
Danke!
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 18:25
von Daniela
Damit aber gleich zum nächsten Problem:
In der Tabelle "pings" gibt es noch ein Feld "timestamp" in dem eben der Timestamp der letzten Abfrage gespeichert wird. Nun kann es zu einer hosts.id mehrere Einträge in der "pings"-Tabelle geben.
Wie bekomme ich nur jeweils die Zeile mit dem neuesten Tiemstamp?
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 18:39
von magadoo
@ Supermega-Depp
Nein
@ Daniela
Evtl. mit der "Group By"-Klausel
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 18:48
von Daniela
Ich glaube ich sollte mir endlich mal ein richtiges Buch zu MySQL zulegen...
Re: MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 19:21
von Fox Mulder
Daniela hat geschrieben:
Wie bekomme ich nur jeweils die Zeile mit dem neuesten Tiemstamp?
Gruss
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 19:59
von Daniela
Damit bekomme ich nur 1 Zeile mit dem neuestem Timestamp - ich will aber pro IP nur 1 Zeile mit je dem neuestem Timestamp.
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 21:56
von tobsn
create temp table. hehe.
MySQL: Probleme mit JOINs
Verfasst: 06.11.2005, 22:08
von derHund
um den jeweils neuesten timestamp zu erhalten, mußt du nochmal left joinen ...
schau mal diesen kommentar:
https://dev.mysql.com/doc/refman/5.0/en ... html#c2022