Выберите данные mysql с предложением where в 2 таблицах - PullRequest
4 голосов
/ 26 января 2011

У меня есть 2 таблицы MySQL, как в примере ниже:

АВТОМОБИЛИ

Id     CAR NAME          AGE

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

ОПЦИИ

Id  id_car   option

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

И мне нужно выбрать все автомобили2-х лет, которые имеют ABS и ESP .Таким образом, он должен вернуться в этом примере: 3 Ford

Если у вас есть идеи ...

Спасибо

Ответы [ 7 ]

8 голосов
/ 26 января 2011

Группировка по / имея гарантирует, что автомобиль обладает обеими желаемыми функциями.

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
2 голосов
/ 26 января 2011
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 голосов
/ 26 января 2011

Попробуйте ::

  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`))

:)

0 голосов
/ 26 января 2011

Я тоже так пробовал и возвращает мне оба форда 1 и 3 ....

Я хочу только 3 Форда с abs и esp

0 голосов
/ 26 января 2011

Я предлагаю вам изменить столбец age на date_created или просто оставить его как age и использовать только целое число.

Если вы используете целое число, просто сделайте следующее:

SELECT c.id, c.car
   FROM cars c
   INNER JOIN options o
   ON o.id_car = c.id
   WHERE c.age >= 2
0 голосов
/ 26 января 2011
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 голосов
/ 26 января 2011

Вам необходимо использовать соединение в таблице OPTIONS:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...