Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос про фирму и товары, Хочу оптимизировать запрос 
:(
    Опции темы
KonstRuctor
Дата 5.9.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Есть таблица (товары и фирмы условно)
Код

| 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 "беда";
}

Понимаю, что это полный бред и можно сделать элегантнее и короче.
Пробовал, ничего не выходит. Выручайте пожалуйста.
PM MAIL WWW ICQ   Вверх
Akina
Дата 5.9.2008, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Код

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

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Wwolf
Дата 5.9.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.6.2008
Где: Kiev region

Репутация: нет
Всего: 0



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

PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.