Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как правильно выбрать товары без нескольких категорий
 
 автор: asker   (08.11.2013 в 12:48)   письмо автору
 
 

Есть 3 таблицы, у одного товара (таблица content) может быть несколько категорий,
Нужно выбрать все товары кроме товаров с категорий с именем 'Apple' и 'Banana', те
если у товара есть хоть одна из этих категорий он не должен выбираться.

Таблицы:
content('record_num')
content_category('content_id', 'cat_id')
category('name', 'cat_id');


Делаю так

SELECT c.record_num FROM content c 
LEFT JOIN content_category cc 
ON c.record_num = cc.content_id
LEFT JOIN category cat
ON cc.cat_id = cat.id
where cat.name !='Apple' and cat.name !='Banana';


но этот вариант работает не корректно.

  Ответить  
 
 автор: cheops   (09.11.2013 в 18:22)   письмо автору
 
   для: asker   (08.11.2013 в 12:48)
 

А почему тогда LEFT JOIN используете, а не просто JOIN? Если нужно избавиться от повторов, то сгруппируйте результаты при помощи GROUP BY. Кроме того, вы не обязаны соединять чистые таблицы, можете отсечь не нужные вам категории при помощи вложенного запроса (правда, в этом случае не получится воспользоваться индексами, которые бывают очень кстати в таких запросах).

Можно начать отталкиваться от следующего запроса (проверить не могу, так как нет вашей базы данных)
SELECT
  c.record_num
FROM
  content c 
JOIN
  content_category cc 
ON
  c.record_num = cc.content_id
JOIN
  (SELECT id FROM category WHERE name !='Apple' and name !='Banana') cat
ON cc.cat_id = cat.id;

  Ответить  
 
 автор: Sfinks   (11.11.2013 в 20:30)   письмо автору
 
   для: asker   (08.11.2013 в 12:48)
 

SELECT * FROM content cn
LEFT JOIN content_category cc ON cn.content_id = cc.content_id
LEFT JOIN category ca ON ca.cat_id = cc.cat_id AND ca.name IN ('Apple', 'Banana')
WHERE cn.record_num IS NULL

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования