[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: запрос в БД, узнать количество данных
masterlelik
Есть база таблица t_propertiers
tov_id | property_id
1 ____|____ 10
1 ____|____ 11
1 ____|____ 12
2 ____|____ 10
2 ____|____ 13
3 ____|____ 10
3 ____|____ 11
4 ____|____ 10
4 ____|____ 14
Чтобы выбрать все товары у которых property_id принимают значения 10 (первый уровень, например "система мебели Бавария") И 11 (второй уровень, "кровать")
я пишу запрос
select tov_id, count(property_id) as cnt from t_propertiers where property_id in (10, 11) group by tov_id having cnt>1
И таким образом получу значения tov_id 1, 3

А как узнать не tov_id, а количество этих tov_id.
Это необходимо для задачи когда у меня есть не одно значение 11 ("кровать"), а несколько (13 - "кресло", 14 - "мягкий уголок").
То есть чтоб не делать несколько запросов, который я указал выше, а получить все количества каждого вида мягкой мебели.

P.S. таких подкатегорий может быть до 40 штук, и делать 40 одинаковых запросов как-то нерационально.



Спустя 22 минуты, 57 секунд (1.05.2009 - 19:33) FatCat написал(а):
Цитата (masterlelik @ 1.05.2009 - 19:10)
select tov_id, count(property_id) as cnt from t_propertiers where property_id in (10, 11) group by tov_id having cnt>1

PHP
$connection_id mysql_connect(    $DB_SERVER$DB_LOGIN$DB_PASSWORD);
if ( !
mysql_select_db($DB_NAME$connection_id) )echo ("ERROR: Cannot find database ".$DB_NAME);
$the_query "select tov_id, count(property_id) as cnt from t_propertiers where property_id in (10, 11) group by tov_id having cnt>1";
$query_id mysql_query($the_query$connection_id);
$num_rows mysql_num_rows($this->query_id);
mysql_close($connection_id);


$num_rows - количество строк в результате запроса.

Спустя 9 минут, 8 секунд (1.05.2009 - 19:42) masterlelik написал(а):
Спасибо
Но прошу прощения, я не четко сформулировал вопрос.
Нужно узнать не одно количество пары 10, 11
А все количества пар: (10, 11), (10,12), (10, 13), (10, 14)

Спустя 12 минут, 18 секунд (1.05.2009 - 19:54) hara написал(а):
SQL
SELECT COUNT('tov_id') WHERE `property_id` IN(10,11)

или конкретнее объясняейте что нужно

Спустя 12 минут, 27 секунд (1.05.2009 - 20:07) masterlelik написал(а):
Цитата (hara @ 1.05.2009 - 16:54)
SQL
SELECT COUNT('tov_id') WHERE `property_id` IN(10,11)

или конкретнее объясняейте что нужно

Попробую другими словами, нужно узнать не общее количество товаров, а отдельное количество каждой из пар (10, 11), (10,12), (10, 13), (10, 14) и конечно же знать какому из типов второго уровня это количество относится: сколько кроватей (property_id=11), сколько кресел (property_id=13), сколько диванов (property_id=14)

Спустя 12 минут, 57 секунд (1.05.2009 - 20:20) hara написал(а):
в таком случае подозреваю что одним запросом никак, бери весь массив и определяй в php количество пар, ну или несколько запросов

Спустя 40 минут, 25 секунд (1.05.2009 - 21:00) masterlelik написал(а):
Цитата (hara @ 1.05.2009 - 17:20)
в таком случае подозреваю что одним запросом никак, бери весь массив и определяй в php количество пар, ну или несколько запросов

Несколько запросов - иногда получается до 40 штук, будет нагружать базу(((

Спустя 26 минут, 41 секунда (1.05.2009 - 21:27) kirik написал(а):
Если я правильно понял, то property_id это категории, а tov_id - id товаров, так?
Тоесть товар с id = 1 находится в категориях 10, 11, 12, а товар с id = 3 в 10, 11. А что означают тогда пары (10, 11), (10,12), (10, 13), (10, 14), о которых ты писал? Или 10-это категория а 11,12,13,1х это подкатегории 10ой категории?
Давай проще... Какой результат должен получиться исходя из таблицы описанной в первом посте?

Спустя 28 минут, 12 секунд (1.05.2009 - 21:55) masterlelik написал(а):
Цитата (kirik @ 1.05.2009 - 18:27)
Если я правильно понял, то property_id это категории, а tov_id - id товаров, так?
Тоесть товар с id = 1 находится в категориях 10, 11, 12, а товар с id = 3 в 10, 11. А что означают тогда пары (10, 11), (10,12), (10, 13), (10, 14), о которых ты писал? Или 10-это категория а 11,12,13,1х это подкатегории 10ой категории?
Давай проще... Какой результат должен получиться исходя из таблицы описанной в первом посте?

Да, 11,12,13 это подкатегории, а 10 это категрия. У одного товара может быть несколько подкатегорий (свойств) как в данном примере для tov_id=1 (11 и 12).

Пары (10, 11), (10,12), (10, 13), (10, 14) значат, что товары, которые имеют ОБА значения каждой пары, будет выбран.


Спустя 16 минут, 8 секунд (1.05.2009 - 22:11) kirik написал(а):
Тогда не пойму смысл этих пар. Если категория 10 включает в себя подкатегории 11-19, то зачем искать пары? Ведь любое число из промежутка 11-19 будет относиться к 10-й категории. Или я не прав?

Спустя 53 минуты, 22 секунды (1.05.2009 - 23:04) masterlelik написал(а):
Цитата (kirik @ 1.05.2009 - 19:11)
Тогда не пойму смысл этих пар. Если категория 10 включает в себя подкатегории 11-19, то зачем искать пары? Ведь любое число из промежутка 11-19 будет относиться к 10-й категории. Или я не прав?

Не совсем - это я для наглядности взял именно такие числа, но скажем подкатегория может быть и меньше иметь значение 9 или значение 341.

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

Спустя 8 минут, 59 секунд (1.05.2009 - 23:13) kirik написал(а):
А.. примерно понял.. Ну лови тогда намёк smile.gif
PHP
SELECT *
   
FROM `test` AS `t1`
       
LEFT JOIN `test` AS `t2ON `t1`.`tov_id` = `t2`.`tov_id`
           
WHERE `t1`.`property_id` = 10
           
AND `t2`.`property_idIN(11,12)

Спустя 1 час, 57 минут, 53 секунды (2.05.2009 - 01:11) masterlelik написал(а):
Цитата (kirik @ 1.05.2009 - 20:13)
А.. примерно понял.. Ну лови тогда намёк smile.gif
PHP
SELECT *
   FROM `test` AS `t1`
       LEFT JOIN `test` AS `t2` ON `t1`.`tov_id` = `t2`.`tov_id`
           WHERE `t1`.`property_id` = 10
           AND 
`t2`.`property_id` IN(11,12)

Спасибо. А этот намек прокатит для множества пар одновременно?smile.gif

Спустя 16 минут, 25 секунд (2.05.2009 - 01:28) kirik написал(а):
Цитата (masterlelik @ 1.05.2009 - 17:11)
А этот намек прокатит для множества пар одновременно?

Он прокатит только для пар с одинаковым первым числом. Хотя если написать вместо `t1`.`property_id` = 10 это - `t1`.`property_id` IN(10, 20) то может тоже сработать (скорее всего сработает).

SQL
..WHERE `t1`.`property_id` IN(категории-первое число пары) AND `t2`.`property_id` IN(подкатегории-вторые числа всех пар всех категорий)

Спустя 3 дня, 9 часов, 41 минута, 42 секунды (5.05.2009 - 11:09) masterlelik написал(а):
Цитата (kirik @ 1.05.2009 - 22:28)
Цитата (masterlelik @ 1.05.2009 - 17:11)
А этот намек прокатит для множества пар одновременно?

Он прокатит только для пар с одинаковым первым числом. Хотя если написать вместо `t1`.`property_id` = 10 это - `t1`.`property_id` IN(10, 20) то может тоже сработать (скорее всего сработает).

SQL
..WHERE `t1`.`property_id` IN(категории-первое число пары) AND `t2`.`property_id` IN(подкатегории-вторые числа всех пар всех категорий)

Да, спасибо работает, я только поменял местами
условия
WHERE `t1`.`property_id` IN(11,12)
AND `t2`.`property_id` = 10
Чтобы получить на выходе 11 и 12, а не 10, чтобы знать id второго уровня


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.