Проверьте, существует ли идентификатор в другой таблице, если да, верните TRUE - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть база данных о продуктах, продуктовые принадлежности, принадлежащие к категории или подкатегории, и я могу быть частью списка избранного

Когда я читаю список предметов из категории, я хотел бы включитьлогическое значение, чтобы увидеть, является ли элемент частью списка избранного.

Избранное хранится в виде комбинации Product_ID и USER_ID с идентификатором индекса первичного ключа

Мне не удалось сделать левое соединение для списка избранных.

Буду очень признателен за вашу поддержку.

База данных с данными https://wetransfer.com/downloads/853bd65b90f3a36b4d9264c018bbda9720190409083930/7d620e


    Select a.*, ifnull(Deriv1.Count , 0) as Count, ifnull(Total1.PCount, 0) as PCount FROM `categories` a  
LEFT OUTER JOIN (SELECT `parent`, COUNT(*) AS Count FROM `categories` GROUP BY `parent`) Deriv1 ON a.`id` = Deriv1.`parent` 
LEFT OUTER JOIN (SELECT `category_id`,COUNT(*) AS PCount, 
JOIN (SELECT id From Favorite Where userID='1' )  FROM `products` GROUP BY `category_id`) Total1 ON a.`id` = Total1.`category_id` 
WHERE a.`parent`=" . $parent


1 Ответ

0 голосов
/ 09 апреля 2019

Я не понял смысла извлечения двух «столбцов подсчета». Но, тем не менее, если вам просто нужен фаворит пользователя 1 или нет, вы можете использовать столбец FavouriteOrNot из этого запроса:

SELECT p.product_id, a.id, f.userID, IFNULL(Deriv1.Count , 0) as Count, IFNULL(Total1.PCount, 0) as PCount, IFNULL(f.id, 0) as FavouriteOrNot 
FROM 
`products` p 
INNER JOIN 
`categories` a 
ON 
p.`category_id` = a.`id` 
LEFT OUTER JOIN 
(SELECT `parent`, COUNT(*) AS Count FROM `categories` GROUP BY `parent`) Deriv1 
ON 
a.`id` = Deriv1.`parent` 
LEFT OUTER JOIN 
(SELECT `category_id`,COUNT(*) AS PCount FROM `products` GROUP BY `category_id`)Total1 
ON 
a.`id` = Total1.`category_id` 
LEFT OUTER JOIN 
`Favorite` f 
ON 
f.`ProductID` = p.`product_id` 
AND 
userID = 1 
WHERE a.`parent`= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...