2015-10-29 3 views
0

У меня есть две таблицы в mysql, tender_items и item_price_add_manual.Объедините две таблицы и покажите уникальные данные в php

В обеих таблицах есть поля itemName и tender_id. Поэтому мое требование, как я буду писать запрос, чтобы присоединиться к этим таблицам и показать только определенный itemNames с, например:

tender_id = 460. Таким образом, результат в PHP приходит как

tender_id | ItemName 
______________________ 
460   Item 1 
460   Item 2 
460   Item 3 

Это возможно только с запрос или мне нужно манипулировать с помощью php-скрипта?

Я попытался это

С выше IAM запроса, получить результат следующим образом:

tender_id | ItemName | tender_id | ItemName 
__________________________________________________ 
460   Item 1  460   Item 3 
460   Item 2  460   Item 3 

Но я жду результат следующим образом:

tender_id | ItemName 
______________________ 
460   Item 1 
460   Item 2 
460   Item 3 
+0

Прошу прощения, я сделал то же самое. Относительно новый для stackoverflow. :) –

ответ

1

Похоже, все, что вам нужно, это UNION операция:

(SELECT item_name, tender_id 
FROM tender_items 
WHERE tender_id=460) 

UNION 

(SELECT item_name, tender_id 
FROM item_price_add_manual 
WHERE tender_id=460) 

Как указано в manual:

поведение по умолчанию для UNION является то, что повторяющиеся строки удаляются из результат.

Следовательно, ваше требование для выбора отдельных значений также будет удовлетворено.

+0

Да, я теперь приближаюсь к решению. Когда я попробовал вышеуказанный запрос, на самом деле тендер_имят имеет 2 записи. Но когда я запустил запрос, он показал только одну запись? я ошибаюсь? –

+0

@SanjuMenon Запрос возвращает единый набор результатов, объединяющий значения из * обеих таблиц *. Невозможно определить, какие записи поступали из этой таблицы. Вы можете добавить для этой цели отдельное поле. –

+0

@SanjuMenon Кроме того, есть * никак *, что запрос с 'UNION' возвращает * меньше * строк по сравнению с' SELECT item_name, tender_id FROM tender_items WHERE tender_id = 460'. –

1
SELECT item_name,tender_id FROM 

((SELECT item_name, tender_id 
FROM tender_items 
WHERE tender_id=460) 

UNION 

(SELECT item_name, tender_id 
FROM item_price_add_manual 
WHERE tender_id=460)) AS T 
GROUP BY item_name,tender_id 
+0

Вы правы. Я пропустил это. 'item_price_add_manual_units' -> 'item_price_add_manual.units', я думаю –

+0

Я отредактировал вопрос с запросом, который вы упомянули. –

+0

@Drew. Pls видит последние изменения. Я упомянул точную проблему. Прошу прощения за это. –

0

Я предполагаю, что у вас есть передний план ключ, который связывает 2 таблицы вместе. Вам не нужно связывать все из одной таблицы с другой, поскольку это делает вещи очень сложными и ошибочными, что может затруднить отладку. Вы можете посмотреть на W3School school tutorial, чтобы знать, как SELECT конкретно.

$query = "SELECT * FROM tender_items, item_price_add_manual WHERE tender_items.tender_id = item_price_add_manual.tender_id AND tender_id = 460"; 
Смежные вопросы