MYSQL - Объединить 2 таблицы в одном запросе, НО иметь 2 предложения WHERE / IN - PullRequest
0 голосов
/ 22 января 2020

Я хочу сделать один MYSQL запрос для 2 таблиц и получить результаты в виде одного объекта / массива. Моя проблема заключается в том, что запрос должен соответствовать набору идентификаторов, которые имеют разные имена в обеих таблицах. Допустим, у меня есть таблица urls и таблица products, и у них обоих есть столбец, который соответствует идентификатору, который я ищу, но назван по-разному ... в таблице URL он называется resource_id, а в таблице продуктов это называется productid.

URLS TABLE: id | resource_id | url

PRODUCTS TABLE: productid | title | description | thumbnail

Итак, в php у меня есть список идентификаторов, которые используются для извлечения обеих таблиц вместе, НО только там, где urls.resource_id и products.productid равно этим идентификаторам.

Вот что у меня есть:

$ids = ["18552", "18554", "18555", "18556"];
$newIds = implode(",",$ids);

$q3 = " SELECT products.title as title, urls.url as url
       FROM urls, products
       WHERE urls.resource_id IN ($newIds)
       AND products.productid IN ($newIds)";

В данный момент это возвращает 4 результата, основанных на переменной $ids 4 раза - всего 16 результатов. Я думаю, что это связано с частью WHERE urls.resource_id IN ($newIds) AND products.productid IN ($newIds запроса, так как 4 * 4 = 16, но я могу ошибаться.

Что-то вроде этого:

{ "title": "Prod 1", "url": "prod-one.html" },
{ "title": "Prod 2", "url": "prod-two.html" },
{ "title": "Prod 3", "url": "prod-three.html" },
{ "title": "Prod 4", "url": "prod-four.html" },

{ "title": "Prod 1", "url": "prod-one.html" },
{ "title": "Prod 2", "url": "prod-two.html" },
{ "title": "Prod 3", "url": "prod-three.html" },
{ "title": "Prod 4", "url": "prod-four.html" },

{ "title": "Prod 1", "url": "prod-one.html" },
{ "title": "Prod 2", "url": "prod-two.html" },
{ "title": "Prod 3", "url": "prod-three.html" },
{ "title": "Prod 4", "url": "prod-four.html" },

{ "title": "Prod 1", "url": "prod-one.html" },
{ "title": "Prod 2", "url": "prod-two.html" },
{ "title": "Prod 3", "url": "prod-three.html" },
{ "title": "Prod 4", "url": "prod-four.html" },

Не совсем уверен как добиться этого без повторов ... никаких предложений?

ТАКЖЕ - эта база данных взята из системы корзины покупок, поэтому я постарался максимально упростить пример, не теряя ясности в своем вопросе / примере.

Заранее спасибо!

1 Ответ

1 голос
/ 22 января 2020

Пожалуйста, попробуйте этот запрос. Он показывает все записи, которые существуют в обеих таблицах и в $ tdis

$ids = ["18552", "18554", "18555", "18556"];
$newIds = implode(",",$ids);

$q3 = " SELECT p.title as title, u.url as url
       FROM urls u INNER JOIN products p ON u. resource_id  = p.productid 
       WHERE u.resource_id IN ($newIds);";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...