Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Запрос про фирму и товары


Автор: KonstRuctor 5.9.2008, 00:23
Есть таблица (товары и фирмы условно)
Код

| id | firm_id | tovar  |
| 1  |    1    |    0   |
| 2  |    3    |    1   |
| 3  |    3    |    2   |
| 4  |    4    |    1   |
| 5  |    1    |    0   |
| 6  |    3    |    3   |
| 7  |    1    |    0   |
| 8  |    3    |    0   |
| 9  |    3    |    0   |

Мне нужно получить TRUE, если фирма под номером 3 продает полный спектр товаров: и 1, и 2, и 3
Если у фирмы под номером 3 не хватает хотя бы одного товара, получаем FALSE.
Номера товаров для данной фирмы уникальны: либо 1, либо 2, либо 3, т.е. у фирмы не могут быть две записи с товаром 1, две записи с товаром 2 и две записи с товаром 3.
Записей для фирмы номер 3 с товаром 0 может быть сколько угодно.
* * *
Я это делаю через три запроса:
Код

$result = $db->query("SELECT count(id) as cnt FROM table WHERE firm_id = '3' AND tovar = '1'");
$foo = mysql_fetch_array($result);
$num1 = $foo["cnt"];
..... // здесь еще два таких же запроса про товары 2 и 3
$num2 = $foo["cnt"];
$num3 = $foo["cnt"];
if ( $num1 == 1 && $num2 == 1 && $num3 == 1 )
{
echo "хорошо!";
}
else 
{
echo "беда";
}

Понимаю, что это полный бред и можно сделать элегантнее и короче.
Пробовал, ничего не выходит. Выручайте пожалуйста.

Автор: Akina 5.9.2008, 07:28
Код

Select `firm_id`, count(distinct `tovar`)=(Select count(distinct `tovar`) From `table`)
From `table`
Group By `firm_id`

Это при условии что количество товаров меняется, но любой присутствует в таблице хотя бы один раз. Джублирование записей не влияет, но если оно исключается (скажем constraint) - можно убрать первый distinct.
Если наличие записей с товаром 0 не должно учитываться - добавь в оба запроса соответствующий Where.

Автор: Wwolf 5.9.2008, 11:38
1. делаешь запрос  по уникальным кодам товара без учета "0" по всей базе (количество записей)
2. делаешь запрос  по уникальным кодам товара без учета "0" по нужной фирме (количество записей)
3. сравниваешь цифры запроса 1 и 2 
4.  если равно получаешь  - TRUE иначе FALSE

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)