2011-01-26 19 views
4

條款我有2個MySQL表像在下面的例子中選擇MySQL數據:與其中2個表

CARS

Id  CAR NAME   AGE 

1 Ford  2 years 
2 AUDI  1 years 
3 Ford  2 years 

OPTIONS

Id id_car option 

1 1  ESP 
2 2   ABS 
3 3   ABS 
4 3   ESP 

,我需要選擇所有2歲的汽車有ABS和ESP。 所以應該在這個例子返回:3福特

如果你有什麼想法?

感謝

回答

0

您需要使用上的選項表的連接:

SELECT c.* FROM CARS c 
JOIN OPTIONS o ON o.id_car=c.id AND o.option='ABS' 
JOIN OPTIONS o2 ON o2.id_car=c.id AND o2.option='ESP' 
WHERE c.age >= 2 

或子查詢:

SELECT c.* FROM CARS c 
WHERE c.age >= 2 
AND c.id IN (SELECT o.id_car FROM OPTIONS o WHERE o.id_car=c.id AND o.option='ABS') 
AND c.id IN (SELECT o.id_car FROM OPTIONS o WHERE o.id_car=c.id AND o.option='ESP') 
+0

他首先需要改年齡場以INT爲您的查詢工作。 – 2011-01-26 14:36:15

+0

謝謝......但它不這樣工作 – mihai 2011-01-26 14:41:15

0
SELECT * FROM CARS LEFT JOIN `OPTIONS` ON `OPTIONS`.`id_car` = `CARS`.`id` WHERE `OPTIONS`.`option` LIKE '%ABS%' 

會做ABS,如果你想要更多,你必須有PHP寫的每個選項的SQL增加使你的最終結果將是

SELECT * FROM CARS LEFT JOIN `OPTIONS` ON `OPTIONS`.`id_car` = `CARS`.`id` WHERE (`OPTIONS`.`option` LIKE '%ABS%' OR `OPTIONS`.`option` LIKE '%ESP%') 
0

我建議你改變「年齡」一欄,要麼「DATE_CREATED」,或者只是將它作爲年齡並僅使用整數。

如果你作爲一個整數使用,只是這樣做:

SELECT c.id, c.car 
    FROM cars c 
    INNER JOIN options o 
    ON o.id_car = c.id 
    WHERE c.age >= 2 
+0

非常感謝大家......我只是試過SELECT c。* FROM CARS c JOIN OPTIONS o ON o.id_car = c.id AND o.option ='ABS ' 加入選項o2 ON o2.id_car = c.id AND o2.option ='ESP' WHERE c.age> = 2且完美工作 – mihai 2011-01-26 14:46:28

8

本集團/有將確保該車既具有所期望的功能。

select c.id, c.name 
    from cars c 
     inner join options o 
      on c.id = o.id_car 
       and o.option in ('ABS','ESP') 
    where c.age = 2 
    group by c.id, c.name 
    having count(distinct o.option) = 2 
+0

@Haim Evgi:這就是組/的原因。這種結構可以確保汽車具有*兩種*功能,而不僅僅是/或。 – 2011-01-26 14:38:46

2
SELECT * FROM CARS WHERE id IN 
(SELECT id_car FROM OPTIONS WHERE GROUP_CONCAT(option) ='ABS,ESP' 
GROUP BY id_car) 
WHERE age ='2 years' GROUP BY CARS.name 
0

我也試過這種方式,並返回我都福特1和3 ....

的我只想要3福特與ABS和ESP

0

試試吧::

Select new_car.name 
    From (select * from cars where year=2) as new_car 
    inner join option as op 
    on (op.id_car = new_car.id AND (op.option = `ABS` OR op.option = `ESP`)) 

:)