 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
26.08.2005, 19:03
|
#1
|
|
TP-Senior
Registriert seit: Dec 2001
|
mysql mit zwei tabellen und where
Hallo!
folgende problem mit Mysql
ich möchte eine abfrage aus 2 tabellen generieren, wobei die bedingungen zur ergebniszurückgabe in der einen tabelle sind und die daten in der anderen,
Tab1:glo Tab2: fachglossar
in der tabelle 1 sind alle stichworte eines glossars gespeichert geornet nach den autoren. die tabelle 2 bildet das fachglossar eines bestimmten fachbereichs, so stehen dort einerseits die ID's der stichworte drin die auch vom autor des fachbereichs angelegt wurden, anderersits kann der autor eines fachbereichs aber auch stichworte aus einem anderen fachbereich in sein fachglossar eijnbinden. das ist in Tab2 gespeichert, also alle ID's von Stichworten, die ein autor sowaohl slebst angelegt hat bzw mit seinem fachglossar verknüpft hat.
Tab2 hat bloß 2 felder id_user und id_glo
Tab1 enthält alle daten zu einen stichwort so auch die daten ob es im front-end dem user überhaupt angezeigt wird oder ob es sich noch im redaktionsprozess befindet.
ich möchte alle stichworte die in der tab 2 (fachglossar) einen autor(id_user) zugeordnet sind auf grundlage einer where bedingung anzeigen lassen. die daten für die where bedingung stehen in tabelle 1,
ich habe schon überlegt das ganze per php auszusorteieren aber das ist ja auch nicht sinn und zweck ner datenbank das man sich alle daten rüberschaufelt und sie dann per php aussortiert.
hier die mysql anweisung die dann per php gesandt wird
SELECT * FROM fachglossar,glo WHERE fachglossar.id_user=$id_user AND glo.glofachkor_dt=1 AND glo.glosprachkor_dt=1 ORDER BY glo.glotitel_dt,glo.glotitel_en
bei der anweisung funktioniert die where klausel jedoch wird ein stichwort nicht nur einmal sondern immer 16 mal aufgerufen.
worran leigt das?
danke und gruß
marcel
Felder: id_glo,
|
|
|
26.08.2005, 20:20
|
#2
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Das liegt an Deiner Zuordnung. Da nur Du den genauen Inhalt kennst, wäre es schon sinnvoll, uns die vollständige Struktur beider Tabellen zu zeigen und genau zu sagen, welche Information Du mit der SQL-Anweisung brauchst.
Bei 16 Ergebnissen heisst das ja, das es 16 Datensätze gibt, auf die die Bedingung zutrifft. Also ohne genauere Infos wirds schwer 
|
|
|
26.08.2005, 20:49
|
#3
|
|
TP-Senior
Registriert seit: Dec 2001
|
die struktur der tabs
Jupp hast ja recht, also hier die struktur der tabellen:
Tabelle 1: glo
id_glo | glo_user | glofachkor_dt | glosprachkor_dt | glofachkor_en | glosprachkor_en | glotitel_dt | glotitel_en | glo_bhk | glo_bk | glotext_dt | glotext_en | glotextq_dt | glotextq_en | glohtml_dt | glohtml_en | globild_dt | globild2_dt | globildtitel_dt | globildq_dt | globild_en | globild2_en | globildtitel_en | globildq_en | globild_kombi | glo_datum
Tabelle 2: fachglossar
id_user | id_glo
$sql="SELECT * FROM fachglossar,glo WHERE fachglossar.id_user=$id_user AND glo.glofachkor_dt=1 AND glo.glosprachkor_dt=1 ORDER BY glo.glotitel_dt,glo.glotitel_en"
ich möchte also alle datensätze haben die in der tab2 die entsprechende user-ID haben, aber gleichzeitig bedingungen (where) der tabelle 1 entsprechen.
das komische ist das MySQL mir bei dieser abfrage ein und den selben datensatz, je ID 16 mal auflistet.
hmm..........................?
z.B. so:
Lebensform
Lebensform
Lebensform
Lebensform
Lebensform
Lebensform
.....16 mal
die ID zu diesem datensatz existiert aber bloß einmal, bei andern skripten wo ich bloß die tab1 aufgrundlage der bedingung WHERE abfrage " ... id_user=$glo_user ...." abfrage wird der datensatz auch nur einmal gelistet. Und per PHPMyAdmin habe ich das auch überprüft, der datensatz existiert nur einmal. ... und nicht 16 mal
habe shcon rumprobiert mit verschiedensten konstellationen, aber es will einfach nicht klappen .................
gruß marcel
Geändert von HeinsMarcel (26.08.2005 um 21:02 Uhr).
|
|
|
26.08.2005, 20:55
|
#4
|
|
TP-Moderator
Registriert seit: Jun 2004
Ort: Hannover
|
Müsste bei der Bedingung für das JOIN nicht auch ne ON- Bedingung her, anstelle von WHERE?
|
|
|
26.08.2005, 21:05
|
#5
|
|
TP-Senior
Registriert seit: Dec 2001
|
On ?
Zitat:
|
Zitat von Adromir
Müsste bei der Bedingung für das JOIN nicht auch ne ON- Bedingung her, anstelle von WHERE?
|
ON? habe schon im web gesucht u8nd nichts gefunden haste nen Adresse wo ich mal nachlesen kann was man mit ON macht und machen kann? Habe bis jetzt alles mit PHp aussortiert aber schon wie oben gesagt ist ja nicht sinn und zweck der sache sich alle daten zu holen uns sie dann die Datensätze per PHP auszuwählen die angezeigt werden sollen. In MySql bin ich leider noch nicht so firm.
gruß marcel
Geändert von HeinsMarcel (26.08.2005 um 21:22 Uhr).
|
|
|
26.08.2005, 21:26
|
#6
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Bei Join ja.
Du machst einen Full-Join, d.h. Select * from tabelle1, tabelle2 ...
Da ist WHERE ok.
Das Ergebnis ist das kartesische Produkt beider Tabellen.
In Deinem Fall ist es viel sinnvoller einen LEFT JOIN zu nehmen
SELECT * FROM glo LEFT JOIN fachglossar ON fachglossar.id_glo= glo.id_glo WHERE fachglossar.id_user=$id_user AND glo.glofachkor_dt=1 AND glo.glosprachkor_dt=1 ORDER BY glo.glotitel_dt,glo.glotitel_en
(ohne Gewehr)
|
|
|
26.08.2005, 21:39
|
#7
|
|
TP-Senior
Registriert seit: Dec 2001
|
Jippi!
also deine sqlanweisung klappt !! Danke!
kannste mir auch noch kur erklären ( wenn die zeit da ist) was da der unterschied ist.
oder gib mir einfach ne internetquelkle und ich lese es nach, ...
.... weil einfach ins skript kopieren ist einfach, verstehen ist besser.
gruß marcel
|
|
|
26.08.2005, 21:48
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Schön das es klappt.
Erklärung - oh, da müsste ich weit ausholen, vielleicht mach ich mal ein Tutorial über Joins.
Gute Quellen - da gibt es viele. Meist muss man sich aus vielen Seiten die nützlichen Infos rausziehen, eine richtig schöne Erklärung hab ich noch nicht gefunden.
Vielleicht reicht für den Einstieg ja dieses: http://www.little-idiot.de/mysql/mysql-118.html#joins
|
|
|
27.08.2005, 00:41
|
#9
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Zitat:
|
Zitat von St@eff.en
..... vielleicht mach ich mal ein Tutorial über Joins.
|
Sorry für Off Topic, aber für so ein Tutorial würde ich auch voten  Es ist tatsächlich nicht einfach info zu finden, die einem den Einstieg in das Verknüpfen von Tabellen und Datenbanken leicht gestalten. (liegt aber vielleicht an der Materie "Datenbank" an sich)
Deswegen ein klares  für ein Tutorial 
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.
|
 |