powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как правильно посчитать многострочный результат?
15 сообщений из 15, страница 1 из 1
как правильно посчитать многострочный результат?
    #38943712
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот есть такой вывод:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
+--------+------+-----+
| bankID | pack | sub |
+--------+------+-----+
|      1 |    1 |   3 |
|      1 |    1 |   2 |
|      1 |    1 |   1 |
|      1 |    1 |   4 |
|      2 |    1 |   1 |
|      2 |    1 |   2 |
|      2 |    1 |   3 |
|      3 |    1 |   3 |
|      3 |    1 |   1 |
|      3 |    1 |   2 |
|      3 |    1 |   4 |
|      4 |    1 |   3 |
|      4 |    1 |   1 |
|      4 |    1 |   4 |
|      4 |    1 |   2 |
|      5 |    1 |   1 |
|      5 |    1 |   3 |
|      5 |    1 |   2 |
|      6 |    1 |   1 |
|      6 |    1 |   2 |
|      6 |    1 |   3 |
|      7 |    1 |   4 |
|      7 |    1 |   3 |
|      7 |    1 |   2 |
|      7 |    1 |   1 |
|      8 |    1 |   1 |
|      8 |    1 |   2 |
|      8 |    1 |   3 |
|      9 |    1 |   2 |
|      9 |    1 |   3 |
|      9 |    1 |   1 |
|     10 |    1 |   3 |
|     10 |    1 |   2 |
|     10 |    1 |   1 |
|     10 |    1 |   4 |
|     45 |    3 |   2 |
|     45 |    4 |   4 |
|     45 |    4 |   3 |
|     45 |    4 |   2 |
|     45 |    1 |   1 |
|     45 |    1 |   2 |
|     45 |    2 |   3 |
|     45 |    1 |   3 |
|     45 |    4 |   1 |
|     45 |    2 |   1 |
|     45 |    2 |   2 |
|     45 |    3 |   1 |
|     45 |    1 |   4 |
+--------+------+-----+
48 rows in set (0.00 sec)



pack это пакет с правилами
sub это сами правила
здесь выводятся только совпавшие, но вообще мне надо найти такие bankID, в которых совпали ВСЕ правила из `pack`
скажем, для bankID=1 там 5 sub на самом деле, а совпало только 4, значит он мне не нужен
а для bankID=2 всего 3 sub и он подойдёт
вот щас думаю, как это лучше сделать
самый простой вариант - в пхп посчитать кол-во и сравнить с select * from table where bankID IN (список совпавших)
т.е. делать ещё 1 запрос по общему кол-ву правил
думал ещё про temporary table
как то через сам sql можно упростить? и чтобы без функций?
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943744
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GROUP BY + HAVING COUNT(DISTINCT)
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943773
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ok
HAVING не придумал, как воткнуть, а без него вот такой результат:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
+--------+------+----+
| bankID | pack | sb |
+--------+------+----+
|      1 |    1 |  4 |
|      2 |    1 |  3 |
|      3 |    1 |  4 |
|      4 |    1 |  4 |
|      5 |    1 |  3 |
|      6 |    1 |  3 |
|      7 |    1 |  4 |
|      8 |    1 |  3 |
|      9 |    1 |  3 |
|     10 |    1 |  4 |
|     45 |    1 |  4 |
|     45 |    2 |  3 |
|     45 |    3 |  2 |
|     45 |    4 |  4 |
+--------+------+----+
14 rows in set (0.00 sec)



SELECT `bankID`,`pack`,count(`sub`) as sb FROM `filters` GROUP BY `bankid`,`pack` ORDER BY `bankid`,`pack`;

как теперь оставить только те `bankID`, у которых хотя бы 1 `pack` захватил ВСЕ свои `sub` ?
как я говорил, у bankID=1 их найдено 4, а надо 5, значит он мимо
а у bankID=2 их как раз 3, значит он остаётся
каждому подзапрос делать нехочется
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943776
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78у bankID=1 их найдено 4, а надо 5, значит он мимо
а у bankID=2 их как раз 3, значит он остаётся
Вот интересно, а как запрос догадается, что у bankID=1 их 5, а у bankID=2 их только три?
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943792
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, ну как вариант - делать подзапрос в эту же таблицу считая, сколько там всего `sub` у данного `pack`
но я ищу чё-то поизящнее
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943794
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя бы через общий запрос отдельный, через временную таблицу может

зы: блин, почему тут редактировать нельзя мессаги свои
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943836
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78считая, сколько там всего `sub` у данного `pack`Итицкая сила! Покажи НА ТВОИХ ДАННЫХ, блин, где ты там 5 насчитал???
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943845
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinatip78считая, сколько там всего `sub` у данного `pack`Итицкая сила! Покажи НА ТВОИХ ДАННЫХ, блин, где ты там 5 насчитал???
Код: plsql
1.
2.
3.
4.
5.
6.
7.
mysql> select count(sub) from filters where bankid=1 and pack=1;
+------------+
| count(sub) |
+------------+
|          5 |
+------------+
1 row in set (0.00 sec)
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943938
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я от тебя что просил? НА ТВОИХ ДАННЫХ. Вот тех самых, которые ты в начале темы запостил. Глазки подыми и посчитай повнимательнее - там только ЧЕТЫРЕ записи для bankid=1 and pack=1.
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943940
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЯ от тебя что просил? НА ТВОИХ ДАННЫХ. Вот тех самых, которые ты в начале темы запостил. Глазки подыми и посчитай повнимательнее - там только ЧЕТЫРЕ записи для bankid=1 and pack=1.
ты сам то глазки подыми и прочитай повнимательнее:
авторскажем, для bankID=1 там 5 sub на самом деле, а совпало только 4, значит он мне не нужен
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943941
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так вот и делай
Код: sql
1.
SELECT id_count from `на самом деле`
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38943946
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНу так вот и делай
Код: sql
1.
SELECT id_count from `на самом деле`


так для каждого банка отдельный запрос получится
я так не хочу
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38944002
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или ты дашь все данные, которыми оперируешь, или можешь и дальше не хотеть...
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38944206
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaИли ты дашь все данные, которыми оперируешь, или можешь и дальше не хотеть...
да какие ещё детали? последнее отдал, от сердца оторвал
есть таблица фильтров, у каждого банка их несколько
чтобы банк совпал, нужно чтобы совпали ВСЕ фильтры этого банка
если совпало 4 из 5, он не нужен, нужно 5 из 5
...
Рейтинг: 0 / 0
как правильно посчитать многострочный результат?
    #38944215
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи исходные таблицы. Включая ту, из которой видно, что "для этого банка имеется 5 фильтров". Пока что ты её тщательно прячешь.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как правильно посчитать многострочный результат?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]