SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden. |
 |

12-12-2006, 12:10
|
compuboy1010
Member
|
|
Registriert seit: Jul 2003
Ort: Deutschland
Beiträge: 474
|
|
[MySQL 4.0] Zwei Datensätze mit einem Datensatz verknüpfen?
Hi,
ich lasse auf meiner Homepage Seminarveranstaltungen ausgeben.
Ich habe 4 Tabellen:
_events_times
_events_locations
_events_details
_person
Die Tabelle _events_times ist wie folgt aufgebaut:
CREATE TABLE `_events_times` (
`id` int(11) NOT NULL auto_increment,
`id_details` int(11) NOT NULL default '0',
`id_location` int(11) NOT NULL default '0',
`active` char(1) NOT NULL default 'y',
`id_referent` int(11) default NULL,
`date_post` timestamp(14) NOT NULL,
`date_s` date NOT NULL default '0000-00-00',
`date_e` date NOT NULL default '0000-00-00',
`time_s` time default '00:00:00',
`time_e` time default '00:00:00',
`lang` varchar(12) NOT NULL default '',
`fee` tinytext,
`id_contact_person` int(50) NOT NULL default '22',
`note` tinytext,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=295 ;
Nun habe ich folgendes Problem:
Die Tabelle _events_times hat einmal ein Attribut id_referent und ein Attribut id_contact_person. Das sind 2 verschiedene Personen (2 verschiedene Datensätze) in Tabelle _person. Ist es möglich beide mit einer Abfrage zu bekommen? Keine Ahnung wie das gehen soll, denn die müssten dann ja auch noch unterschiedliche Namen bekommen. Bräuchte da Hilfe.
|

12-12-2006, 12:41
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
2x nen LEFT JOIN auf _person (1x referent_id=perso_id + 1x contact_id=perso_id) geht nicht?
|

12-12-2006, 12:47
|
compuboy1010
Member
|
|
Registriert seit: Jul 2003
Ort: Deutschland
Beiträge: 474
|
|
Ja, die Idee hatte ich auch schon, aber wie soll das gehen?
Wie unterscheide ich dann bsw. zwischen der Email Addy des Referenten und der der Kontakt Person? Die beiden sind ja in der gleichen Tabelle und haben die Spalten haben die gleichen Attributnamen. "AS" kann ich da doch nicht verwenden...
|

12-12-2006, 12:56
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
Original geschrieben von compuboy1010
"AS" kann ich da doch nicht verwenden...
|
wieso nicht? du kannst jeder explizit angesprochenen spalte einen alias verpassen. halt nur blöd, wenn man faul ist und alles per * selektiert
|

12-12-2006, 13:00
|
compuboy1010
Member
|
|
Registriert seit: Jul 2003
Ort: Deutschland
Beiträge: 474
|
|
Nein faul nicht, aber es geht trotzdem nicht:
PHP-Code:
$res = mysql_query("
SELECT
c.id, c.date_e, c.date_s, c.time_s, c.time_e, c.note AS note_times,
b.at, b.street, b.building, b.zip, b.city, b.country,
a.headline, a.summary, a.target, a.fee, a.info, a.anmeldung, a.infolink,
a.note AS note_details, d.name_f, d.name_l, d.email
FROM
_events_details a, _events_locations b, _events_times c, _person d
LEFT JOIN _person
ON c.id_referent = d.id
LEFT JOIN _person
ON c.id_contact_person = d.id
WHERE
c.lang = '".$language."'
AND
c.date_s BETWEEN CURDATE() AND ADDDATE(CURDATE(), INTERVAL 200 DAY)
AND
c.id_details = a.id_details
AND
c.id_location = b.id_location
AND
c.active = 'y'
ORDER BY
c.date_s ASC"
);
Geändert von compuboy1010 (12-12-2006 um 13:12 Uhr)
|

12-12-2006, 13:13
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
Original geschrieben von compuboy1010
Nein faul nicht, aber es geht trotzdem nicht:
PHP-Code:
SELECT
....
FROM
_events_times c
LEFT JOIN _person p1
ON c.id_referent = p1.id
LEFT JOIN _person p2
ON c.id_contact_person = p2.id
LEFT JOIN _events_details a
ON ...
LEFT JOIN _events_locations b
ON ...
WHERE
...
|
mir würde das so besser gefallen (ob LEFT, RIGHT, INNER JOIN musst du selber sehen).
|

12-12-2006, 13:30
|
compuboy1010
Member
|
|
Registriert seit: Jul 2003
Ort: Deutschland
Beiträge: 474
|
|
Ahhh, interessant....!
OK, ich habe mich mal versucht:
PHP-Code:
$res = mysql_query("
SELECT
c.id, c.date_e, c.date_s, c.time_s, c.time_e, c.note AS note_times,
b.at, b.street, b.building, b.zip, b.city, b.country,
a.headline, a.summary, a.target, a.fee, a.info, a.anmeldung, a.infolink,
a.note AS note_details, p1.name_f, p1.name_l, p1.email, p2.name_f, p2.name_l, p2.email
FROM
_events_times c
LEFT JOIN _person p1
ON c.id_referent = p1.id
LEFT JOIN _person p2
ON c.id_contact_person = p2.id
LEFT JOIN _events_details a
ON c.id_details = a.id_details
LEFT JOIN _events_locations b
ON c.id_location = b.id_location
WHERE
c.lang = '".$language."'
AND
c.date_s BETWEEN CURDATE() AND ADDDATE(CURDATE(), INTERVAL 200 DAY)
ORDER BY
c.date_s ASC"
);
Nun stellt sich mir die Frage, wenn es so funzen sollte - muss gleich nochmal drüberschauen - wie ich das denn in PHP ausgeben könnte!
Wie würde ich nun email aus p1 und email aus p2 ausgeben?
Ist mir schleierhaft!
|

12-12-2006, 13:35
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
Original geschrieben von compuboy1010
Wie würde ich nun email aus p1 und email aus p2 ausgeben?
Ist mir schleierhaft!
|
ALIAS vergeben! und die query mal von hand im phpmyadmin testen. print_r() kann auch hilfreich sein. kann doch nicht so schwer sein, oder?
|

12-12-2006, 13:40
|
compuboy1010
Member
|
|
Registriert seit: Jul 2003
Ort: Deutschland
Beiträge: 474
|
|
Zitat:
kann doch nicht so schwer sein, oder?
|
Das ist relativ, wenn man sich nicht jeden Tag mit SQL beschäftigt dann schon!
Das Problem ist, dass ich nicht weiß an welcher Stelle ich die Aliase vergeben soll.
Geändert von compuboy1010 (12-12-2006 um 13:46 Uhr)
|

12-12-2006, 13:52
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
Original geschrieben von compuboy1010
Das Problem ist, dass ich nicht weiß an welcher Stelle ich die Aliase vergeben soll.
|
schwere geburt mit dir. alle doppelt benamten spalten werfen einen mysql_error. wenn du also 2x "email" holst, bringst du mysql durcheinander, also für min. 1 von beiden einen alias verwenden.
|

12-12-2006, 13:56
|
compuboy1010
Member
|
|
Registriert seit: Jul 2003
Ort: Deutschland
Beiträge: 474
|
|
Super!!!
Es klappt nun. Du warst eine sehr große Hilfe!!
Vielen Dank!!
Geändert von compuboy1010 (12-12-2006 um 14:53 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|