2011-10-28 6 views
2

一つのテーブルに二つのフィールドに参加しますが、人のIDを持つ人たちのテーブルに関連します限り私が得た、しかしとして情報SQLはこれがある</p> <p>を新しい行としてPERSON_2、私は行としてPERSON_1返すようにしたい2人 - を持っているの予約テーブルを持っている

SELECT people.* FROM (
    (select booking.person_1 as id from booking) 
    union ALL 
    (select booking.person_2 as id from booking) 
) as peopleids 
join people on people.id = peopleids.id; 

HERESに私の構造

CREATE TABLE IF NOT EXISTS `booking` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `slot` enum('morning_drive','afternoon_loop','return_drive') NOT NULL, 
    `type` enum('911','vintage_911') NOT NULL, 
    `car` int(11) NOT NULL, 
    `person_1` int(11) DEFAULT NULL, 
    `person_2` int(11) DEFAULT NULL, 
    `dated` date NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 


CREATE TABLE IF NOT EXISTS `people` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `first_name` varchar(50) NOT NULL, 
    `last_name` varchar(50) NOT NULL, 
    `organisation` varchar(100) NOT NULL, 
    `event_date` date NOT NULL, 
    `wave` varchar(20) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 

私はlike- person.first_name、person.last_name、人物設定の結果を得ることができる方法上の任意のアイデアをご予約に引くdoes notの.orgアニメーション、予約書、人物、車、人物。イム二つのフィールドを持ち、1つのリストに、このに興味がある人のための

更新し、それらを関連付けるためにそれらを持って、私の特定の日付に

がHERESにPHPと私の最後のクエリが引っ張ってvarsの第三のテーブルを結合して苦労また、スロットと第3のテーブルを結合

SELECT peopleids.id, 
     peopleids.car, 
     cars.nr, 
     p.first_name, 
     p.last_name, 
     p.organisation, 
     p.event_date, 
     p.wave 
FROM (SELECT booking.car, booking.person_1 as id FROM booking WHERE booking.dated = '".$date."' AND booking.`slot` = '".$slot."' 
     union ALL SELECT booking.car, booking.person_2 as id FROM booking WHERE booking.dated = '".$date."' AND booking.`slot` = '".$slot."' 
    ) as peopleids 
LEFT JOIN people p ON p.id = peopleids.id LEFT JOIN cars on cars.id = peopleids.car; 
+1

がpeople.id = peopleids.id上の人々に参加するのに役立ちますか? – StuartLC

+0

この作品..しかし、私は関連する予約情報をプルすることができません、何が最善の方法? –

+0

あなたはあなたの組合の両方の残りのフィールドを選択する必要があります(booking.person1、booking.someotherfield、booking.bookingdateを選択してください) – StuartLC

答えて

1
SELECT 
     ag.id, 
     p.first_name, 
     p.last_name, 
     p.organisation, 
     p.event_date, 
     p.wave 
FROM (
     SELECT booking.person_1 as id, booking.Car as car FROM booking 
     union ALL 
     SELECT booking.person_2 as id, booking.Car as car FROM booking 
    ) as ag 
JOIN people p ON people.id = ag.id; 
INNER | LEFT JOIN Cars c ON c.ID = ag.car 
+0

返されるbooking.carが必要です。車のテーブルに参加する(私は私の質問でそれを一度も言及していない知っているが、私はそれが自分の参加を追加するのは簡単だろうと思ったが貼られた) –

+0

私はどのように両方のテーブルが関連して、私はおそらくそれはあなたにいくつかのポインタをあなたが望むものを達成する方法を与える私のクエリを更新しました – sll

0
select people.first_name as firstname, 
      people.last_name as lastname, 
      people.organisation, 
      booking.dated, 
      booking.car, 
      booking.slot from booking 
left join people on booking.person_1 = people.id 

ORそれでもサポートが必要な場合...

select people.first_name as firstname, 
      people.last_name as lastname, 
      people.organisation, 
      booking.dated, 
      booking.car, 
      booking.slot 
from booking 
left join people on booking.person_1 = people.id or booking.person_2 = people.id 

チェックはあなた

関連する問題