2015-04-08 3 views
1

У меня есть 3 разных таблицы, в которых на основе поиска в первой таблице я могу получить данные со второго и на основе поиска с первого и второго я могу получить данные из 3-й таблицы.Как получить данные из 3 таблиц в одном SELECT [MySQL]

таблицы выглядит следующим образом:

table cases 
+-------+----------+------------+---------+ 
|case_id| car_model|  vin | country | 
+-------+----------+------------+---------+ 
| 1 | VW | ABCDEFG | EN | 
+-------+----------+------------+---------+ 
| 2 | VW | GFEDCBA | PL | 
+-------+----------+------------+---------+ 
table calculations 
+-------+---------------+------------+---------+ 
|case_id|calculation_id | price | country | 
+-------+---------------+------------+---------+ 
| 1 |45545662512 | 11000 | EN | 
+-------+---------------+------------+---------+ 
| 1 |45545662512 |  7000 | PL | 
+-------+---------------+------------+---------+ 
| 2 |1234561234  |  3000 | EN | 
+-------+---------------+------------+---------+ 
| 2 |3214561234  |  6000 | EN | 
+-------+---------------+------------+---------+ 
table positions 
+-------+------------+------------+--------------+ 
|case_id|repairmethod| text |calculation_id| 
+-------+------------+------------+--------------+ 
| 1 |  L  | hallo | 7894561234 | 
+-------+------------+------------+--------------+ 
| 1 |  L  |  hi1 | 45545662512 | 
+-------+------------+------------+--------------+ 
| 2 |  L  |  hi2 | 45545662512 | 
+-------+------------+------------+--------------+ 
| 2 |  E  |  hi3 | 45545662512 | 
+-------+------------+------------+--------------+ 
| 2 |  G  |  hi4 | 45545662512 | 
+-------+------------+------------+--------------+ 
| 2 |  L  |  hi5 | 3214561234 | 
+-------+------------+------------+--------------+ 
| 2 |  L  |  hi6 | 3214561234 | 
+-------+------------+------------+--------------+ 

Как я написал:

  • Получить данные и case_id из таблицы № 1:

    «SELECT * FROM случаи, когда Vin =: vin ORDER BY date_created DESC LIMIT 60 ";

  • На основе case_id я получаю от первого поиска таблицы в таблице № 2, возьмите последнюю строку:

    "SELECT * FROM расчетов WHERE case_id =: случай И страна =: страна ORDER BY calculation_id DESC LIMIT 1";

  • Поиск в таблице № 3 на основе case_id из таблицы 1 и calculation_id из таблицы 2:

    «SELECT текст из положений, где calculation_id =: calculationid И case_id =: case_id И repairmethod как 'L%' ПРЕДЕЛ 60 «;

Ожидаемый результат, если поиск пользователя для ABCDEFG, например:

Из случаев таблицы:

car_model = VW 
country = EN 
case_id = 1 

Из расчетов таблицы:

calculation_id = 45545662512  
price = 11 000 

Из таблицы позиций:

text = hi1 
text = hi2 

Но этот запрос основан на PHP, хранении значений в variabiles и т. Д., Есть ли возможность записать все мои предыдущие записи в одном SELECT?

Я уже попробовать что-то с INNER JOIN

"SELECT * FROM cases v INNER JOIN calculations c 
        ON v.case_id = c.case_id 
        INNER JOIN positions p 
        ON v.case_id = p.case_id 
        WHERE v.vin = :vin 
        ORDER BY c.name DESC 
        LIMIT 4"; 

Но Есть несколько проблем, с ограничениями, с выбором с несколько Wheres, и так далее. Я что-то пропустил?

Спасибо за любую помощь.

+0

Каков ваш ожидаемый результат? –

+0

Hi @ZoharPeled отредактированный вопрос, я могу получить этот результат с помощью PHP, хранящего переменные, и я надеюсь пропустить этот – Andurit

ответ

0

попробовать это:

SELECT cases.case_id, cases.car_model, cases.country, 
     calculations.calculation_id, calculations.price, 
     positions.text 
FROM cases INNER JOIN 
calculations ON(cases.case_id = calculations.case_id AND cases.country = calculations.country) INNER JOIN 
positions ON(calculations.case_id = positions .case_id AND calculations.calculation_id = positions.calculation_id) 
WHERE vin = :vin 

Примечание: если вы ищете «АБВГДЕЖ», это даст вам 2 строки данных, по одному для каждой записи в таблице позиций.

+0

Привет, Zohar, я просто проверю его, что код определенно выглядит хорошо и имеет смысл, и когда я использую этот SQL, я не получаю ошибка, но вывод пуст :( – Andurit

+0

Это работает! Я не получаю никакого результата, потому что в моих позициях у меня не было никакого результата для этого утверждения.Мне придется это выдумать, но все-таки БОЛЬШОЕ СПАСИБО! за вашу помощь – Andurit

+0

Рад помочь :-) –

Смежные вопросы