條款我有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福特
如果你有什麼想法?
感謝
條款我有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福特
如果你有什麼想法?
感謝
您需要使用上的選項表的連接:
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')
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%')
我建議你改變「年齡」一欄,要麼「DATE_CREATED」,或者只是將它作爲年齡並僅使用整數。
如果你作爲一個整數使用,只是這樣做:
SELECT c.id, c.car
FROM cars c
INNER JOIN options o
ON o.id_car = c.id
WHERE c.age >= 2
非常感謝大家......我只是試過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
本集團/有將確保該車既具有所期望的功能。
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
@Haim Evgi:這就是組/的原因。這種結構可以確保汽車具有*兩種*功能,而不僅僅是/或。 – 2011-01-26 14:38:46
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
我也試過這種方式,並返回我都福特1和3 ....
的我只想要3福特與ABS和ESP
試試吧::
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`))
:)
他首先需要改年齡場以INT爲您的查詢工作。 – 2011-01-26 14:36:15
謝謝......但它不這樣工作 – mihai 2011-01-26 14:41:15