Hallo zusammen,
ich stehe gerade ein wenig auf dem Schlauch.
Ich habe folgende Abfrage:
$abfSQL= ("SELECT DISTINCT n.notiz_id,
n.id_mitglieder_id,
n.notiz,
n.zaehler,
DATE_FORMAT(n.erstellt, '%d.%m.%Y') AS datum,
DATE_FORMAT(n.erstellt, '%H:%m:%s') AS zeit,
n.betreff,
n.thread,
m.mitglieder_id,
DATE_FORMAT(m.erstellt, '%d.%m.%Y') AS regdatum,
m.mitgliedsname
FROM notizen AS n, mitglieder AS m
WHERE n.thread='$thread' ");
Die Abfrage liefert mir die Daten 2mal. Hier wird ja das Produkt aus den IDs gebildet.
Ich habe momentan keine Idee, wie die Abrage aussehen muss, damit ich die Daten nur einmal erhalte.
Was ist wohl der Unterschied zwischen:
MYSQL_ASSOC und MYSQL_NUM zu MYSQL_BOTH
Ich weiß jetzt nicht, was du mir sagen willst.
Die Abfrage liefert mir auch im 'MySQL Command Line Client' die Datensätze doppelt.
Dann kann das doch nichts mit php zu tun haben, oder doch?
Folgendermaßen verarbeite ich die Abfrage:
$erg=mysql_query($abfSQL) OR die("Error: $abfSQL <br>".mysql_error());
while ($list=mysql_fetch_row($erg)) {
Die anschließende Ausgabe funktioniert auch, nur dass ich jeder Datensatz 2 mal ausgegeben wird.
Da ich Anfänger bin, wäre es hilfreich, wenn du genau sagst, was fehlt.
SELECT n.id_mitglieder_id,
m.mitglieder_id,
n.thread
FROM notizen AS n, mitglieder AS m
WHERE n.thread=1;
Ausgabe:
id_mitglieder_id mitglieder_id thread
_______9___________9________1
_______9__________10________1
______10___________9________1
______10__________10________1
Hiervon möchte ich aber nur die ersten beiden Datensätze haben.
Wenn ich die 'm' Tabelle auch noch entferne bekomme ich natürlich nur 2 Datensätze, aber dann fehlen mir logischerweise die Daten aus der 'm' Tabelle.
Gibt es eine Möglichkeit, die richtige Anzahl Datensätze herauszubekommen, wenn die WHERE-Klausel sich auf Nichtschlüsselfelder bezieht? Man muss doch das 'kartesische Produkt' noch eingrenzen können.
'thread' ist bei mir kein Schlüsselfeld.
Es sind im Endeffekt die gleichen Daten, die da rauskommen. Ich kann auch die letzten beiden DS nehmen, das spielt keine Rolle.
Die Struktur ist nicht geheim. Hier kommt sie:
CREATE TABLE `notizen` (
`notizen_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_mitglieder_id` int(10) unsigned NOT NULL,
`notiz` varchar(512) NOT NULL,
`erstellt` datetime NOT NULL,
`betreff` varchar(40) NOT NULL,
`thread` int(10) unsigned NOT NULL,
`zaehler` int(10) unsigned NOT NULL,
`noderg` varchar(1) NOT NULL,
PRIMARY KEY (`notizen_id`,`thread`) USING BTREE
)
CREATE TABLE `mitglieder` (
`mitglieder_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`mitgliedsname` varchar(30) NOT NULL,
`passwort` varchar(40) NOT NULL,
`email` varchar(50) NOT NULL,
`rechte` varchar(3) NOT NULL,
`erstellt` date NOT NULL,
`vorname` varchar(40) NOT NULL,
`nachname` varchar(40) NOT NULL,
PRIMARY KEY (`mitglieder_id`,`mitgliedsname`) USING BTREE
)
Ich hoffe, das hilft, um auf eine Lösung zu kommen.
Wenn du php-Experte bist und keine Ahnung von MySQL hast, dann ist das nichts schlimmes, aber verkneife dir einfach deine Antworten. Die bringen niemanden wirklich weiter.