| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Diskussion: Durch Verknüpfung werden gleiche Zellinhalte überschrieben im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Hallo Community, ich hoffe ihr könnt mir helfen, trotz dem merkwürdigen Titel. Ich weiß nicht genau, wie ich das Problem ...
![]() |
|
|
#1 (permalink) |
|
Registriert seit: 31.03.09
![]() |
Durch Verknüpfung werden gleiche Zellinhalte überschrieben
Hallo Community, ich hoffe ihr könnt mir helfen, trotz dem merkwürdigen Titel. Ich weiß nicht genau, wie ich das Problem in Worte fassen soll. Ich mache eine SQL-Abfrage (eingebettet in PHP), mit der in einer Tabelle eine geplante VeranstaltungsID und eine neue VeranstaltungsID abgefragt wird. In der Veranstaltungstabelle suche ich mir dann zu der ID den Namen heraus. Diesen Plan will ich dann als Tabelle (planmäßige Veranstaltung und neue Veranstaltung in einer Zeile mit verschiedenen anderen Daten) ausgeben. PHP-Code:
Wie kann ich also bei Verknüpfungen den Inhalt einer Spalte abhängig von der ID eines Eintrags in der anderen Tabelle ausgeben lassen? Danke! Geändert von bivg (20.12.09 um 19:07 Uhr) Grund: gelöst |
|
|
|
|
|
#2 (permalink) |
|
Moderator
![]() |
Poste doch mal die Abfragen, die du auf die Datenbank ausführst und ggf. auch das Tabellenschema. Ansonsten kann ich dein Problem nicht ganz nachvollziehen...
|
|
|
|
|
|
#3 (permalink) |
|
Themenstarter
Registriert seit: 31.03.09
![]() |
Ok, hier ist ein Auszug aus der Tabelle "Plan":
Code:
CREATE TABLE `Plan` ( `planid` int(5) NOT NULL auto_increment, `veranstaltungdatum` varchar(100) default NULL, `planveranstaltungid` int(5) default NULL, `neuveranstaltungid` int(5) default NULL, PRIMARY KEY (`vertretungid`) ) Code:
CREATE TABLE `Veranstaltungen` ( `id` int(5) NOT NULL auto_increment, `veranstaltungname` varchar(150) default NULL, PRIMARY KEY (`vertretungid`) ) PHP-Code:
Wenn nun eine geplante Veranstaltung durch eine neue ersetzt wird, soll in der Tabelle die alte und die neue Veranstaltung stehen. Mit der Ausgabe aus Post #1 wird jedoch der Ausgabewert immer mit der letzten Information (hier dann die neue Veranstaltung) überschrieben, sodass zweimal der Name der neuen Veranstaltung ausgegeben wird. Auszug aus der Tabelle, die ausgegeben werden soll: Code:
Datum Geplant Stattdessen 00.00.0000 Tanzen 00.00.0000 Turnen Schwimmen Geändert von bivg (20.12.09 um 08:00 Uhr) |
|
|
|
|
|
#4 (permalink) |
|
Moderator
![]() |
Bin mir nicht sicher, ob ich jetzt dein Problem verstanden habe... aber wie wär's denn mit einem JOIN statt deiner WHERE-Konstruktion in der Abfrage:
Code:
SELECT * FROM Plan p
LEFT JOIN Veranstaltungen a
ON p.planveranstaltungid=a.id
LEFT JOIN Veranstaltungen b
ON p.neuveranstaltungid=b.id
|
|
|
|
|
|
#5 (permalink) |
|
Themenstarter
Registriert seit: 31.03.09
![]() |
Vielen Dank für die Idee. Aber bekomme ich so mit der Ausgabe aus Post #1, indem ich also aus der Tabelle "Veranstaltungen" den Namen hole nicht auch zweimal den gleichen Namen?
Ich habe mir jetzt damit geholfen zwei Abfragen zu machen. Eine, in der ich geplante Dinge abfrage und eine, in der ich die neuen Dinge abfrage. Mit dieser Verschachtelung scheint es zumindest zu gehen. PHP-Code:
|
|
|
|
|
|
#6 (permalink) |
|
Themenstarter
Registriert seit: 31.03.09
![]() |
Hab's jetzt nochmal ausporbiert. Mit deiner Idee ist die Ausgabe jetzt
Code:
Datum Geplant Stattdessen 00.00.0000 Turnen Turnen 00.00.0000 Schwimmen Schwimmen Wäre klasse, wenn dir (oder jemand anders) noch was einfallen würde. Mit meiner Methode (zwei Abfragen) klappt es nämlich auch nicht so wirklich. |
|
|
|
|
|
#7 (permalink) |
|
Member of Honour
![]() |
das Problem ist das "SELECT *" ...
"SELECT *" ist meist ein Anzeichen von Faulheit oder undurchdachtem SQL-Query... man sollte immer genau definieren, was man überhaupt zurück braucht... gerade wenn man 2 mal über die gleiche Tabelle JOINt, sonst bekommt man in der Ausgabe eben nur 1 Ausgabefeld "veranstaltungname" zurück... hier ein Code, der funktionieren sollte: PHP-Code:
Für das Feld "veranstaltungdatum" lohnt sich der Typ "datetime" - dann kann man auch gleich, wie in dem Beispielcode, zuverlässig nach diesem sortieren... Ausgabe: Code:
Datum geplant stattdessen 2009-12-21 17:00:00 turnen 2009-12-21 21:00:00 tanzen tischtennis 2009-12-23 18:00:00 schwimmen fußball 2009-12-27 12:00:00 tanzen Die Darstellung des Datums lässt sich mit DATE_FORMAT im SQL-Query beeinflussen |
|
|
|
|
|
#8 (permalink) |
|
Themenstarter
Registriert seit: 31.03.09
![]() |
Vielen Dank! Ihr habt mir wirklich den Allerwertesten gerettet. Im Moment scheint wirklich mal alles so zu klappen, wie ich mir das vorstelle.
Deswegen markiere ich den Thread mal als gelöst und komme ggf. (hoffentlich nicht ) nochmal auf euch zu.Wegen dem Datum. Du hast Recht, dass UNIX-Time hier wesentlich sauberer wäre. Leider wurde mir die Datenbank aber so vorgegeben und ich kann nur einige, wenige Änderungen vorschlagen. Mal sehen, was sich tun lässt...
|
|
|
|
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|