Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как внедрить в запрос несколько разных COUNT / 17 сообщений из 17, страница 1 из 1
22.11.2005, 13:27:03
    #33392309
martini
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
Понимаю, что главная ошибка у мня в ДНК, но мне очень нужно прикрутить эти COUNT's к запросу, чтобы по ним делать сортировку. Поможите а?

Первый запрос чинно выводит ожидаемую одну строку. Второй не дает никакой ошибки, но выводит 0 строк, в моем понимании - не срабатывает.

РАБОТАЕТ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT
fusion_fifa_comands.id,
fusion_fifa_comands.name,
fusion_fifa_comands.user_id,
fusion_fifa_comands.seria_id,
fusion_fifa_comands.group_id,
fusion_users.user_name,
fusion_fifa_series.name AS s_name,
fusion_fifa_groups.name AS g_name,
fusion_fifa_groups.type AS g_type,
SUM(fusion_fifa_games.rating) AS rating,
SUM(fusion_fifa_games.rez1) AS zab,
SUM(fusion_fifa_games.rez2) AS prop
FROM fusion_fifa_comands
LEFT JOIN fusion_users
ON fusion_users.user_id = fusion_fifa_comands.user_id
LEFT JOIN fusion_fifa_series
ON fusion_fifa_series.id = fusion_fifa_comands.seria_id
LEFT JOIN fusion_fifa_groups
ON fusion_fifa_groups.id = fusion_fifa_comands.group_id
LEFT JOIN fusion_fifa_games
ON fusion_fifa_games.you = fusion_fifa_comands.id
WHERE fusion_fifa_comands.id='2'
GROUP BY fusion_fifa_comands.id
ORDER BY rating DESC

НЕ РАБОТАЕТ:
Код: plaintext
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.
SELECT
fusion_fifa_comands.id,
fusion_fifa_comands.name,
fusion_fifa_comands.user_id,
fusion_fifa_comands.seria_id,
fusion_fifa_comands.group_id,
fusion_users.user_name,
fusion_fifa_series.name AS s_name,
fusion_fifa_groups.name AS g_name,
fusion_fifa_groups.type AS g_type,
SUM(fusion_fifa_games.rating) AS rating,
SUM(fusion_fifa_games.rez1) AS zab,
SUM(fusion_fifa_games.rez2) AS prop,
COUNT(games1.id) AS games,
COUNT(games2.id) AS win,
COUNT(games3.id) AS loose,
COUNT(games4.id) AS eqv
FROM fusion_fifa_comands
LEFT JOIN fusion_users
ON fusion_users.user_id = fusion_fifa_comands.user_id
LEFT JOIN fusion_fifa_series
ON fusion_fifa_series.id = fusion_fifa_comands.seria_id
LEFT JOIN fusion_fifa_groups
ON fusion_fifa_groups.id = fusion_fifa_comands.group_id
LEFT JOIN fusion_fifa_games
ON fusion_fifa_games.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games1
ON games1.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games2
ON games2.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games3
ON games3.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games4
ON games4.you = fusion_fifa_comands.id
WHERE fusion_fifa_comands.id='2'
AND games2.rez1 > games2.rez2 
AND games3.rez1 < games3.rez2 
AND games4.rez1 = games4.rez2 
GROUP BY fusion_fifa_comands.id
ORDER BY rating DESC
...
Рейтинг: 0 / 0
22.11.2005, 13:40:10
    #33392346
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
и что, если саунты вырезать, начинает выводить не ноль строк?
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.11.2005, 13:49:13
    #33392376
martini
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
Ну да, первый запрос без каунтов (и без дополнительных обращений к таблице games и без соответсвующих условий для этих поименованиых "ипостасей") выводит, как я и написал - вполне ожидаемую одну строку.
...
Рейтинг: 0 / 0
22.11.2005, 14:30:35
    #33392526
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
я про второй запрос. Если из второго саунты вырезать.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.11.2005, 14:34:13
    #33392544
martini
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
Тогда все равно 0 строк:

Код: plaintext
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.
SELECT
fusion_fifa_comands.id,
fusion_fifa_comands.name,
fusion_fifa_comands.user_id,
fusion_fifa_comands.seria_id,
fusion_fifa_comands.group_id,
fusion_users.user_name,
fusion_fifa_series.name AS s_name,
fusion_fifa_groups.name AS g_name,
fusion_fifa_groups.type AS g_type,
SUM(fusion_fifa_games.rating) AS rating,
SUM(fusion_fifa_games.rez1) AS zab,
SUM(fusion_fifa_games.rez2) AS prop
FROM fusion_fifa_comands
LEFT JOIN fusion_users
ON fusion_users.user_id = fusion_fifa_comands.user_id
LEFT JOIN fusion_fifa_series
ON fusion_fifa_series.id = fusion_fifa_comands.seria_id
LEFT JOIN fusion_fifa_groups
ON fusion_fifa_groups.id = fusion_fifa_comands.group_id
LEFT JOIN fusion_fifa_games
ON fusion_fifa_games.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games1
ON games1.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games2
ON games2.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games3
ON games3.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games4
ON games4.you = fusion_fifa_comands.id
WHERE fusion_fifa_comands.id='2'
AND games2.rez1 > games2.rez2 
AND games3.rez1 < games3.rez2 
AND games4.rez1 = games4.rez2 
GROUP BY fusion_fifa_comands.id
ORDER BY rating DESC
...
Рейтинг: 0 / 0
22.11.2005, 14:59:37
    #33392657
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
чтд. Каунты не виноваты :)
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.11.2005, 15:20:23
    #33392721
martini
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
Я не обвиняю каунты. Я спрашиваю гуру КАК мне получить то что я хочу. Хорошо, что они не виноваты, ибо они мне как раз и нужны. Но результат нулевой :( А хотелось бы строчечку получить.
...
Рейтинг: 0 / 0
22.11.2005, 15:55:20
    #33392866
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
Нужно считать не каунты, а понимать, как сервер делает объединения таблиц, чтобы знать, что считать.

В общем смысле твой запрос сводится к произведению строк всех таблиц объединенных левым объединением с таблицей fusion_fifa_comands

Поэтому саунты будут на некоторых ветках задвоены или затроены.

Пользуй конструкцию count(distinct(<имя_таблицы>.<ключ>)) для посдсчета количества строк, но сумму таким образом лучше не считать, т.к. бока в реальной работе бедут.
...
Рейтинг: 0 / 0
22.11.2005, 16:12:57
    #33392928
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
сначала получи строчечку, а уж потом кауны будем считать, ок?
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.11.2005, 16:30:28
    #33393001
martini
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
Валентин КНужно считать не каунты, а понимать, как сервер делает объединения таблиц, чтобы знать, что считать.

В общем смысле твой запрос сводится к произведению строк всех таблиц объединенных левым объединением с таблицей fusion_fifa_comands

Поэтому саунты будут на некоторых ветках задвоены или затроены.

Пользуй конструкцию count(distinct(<имя_таблицы>.<ключ>)) для посдсчета количества строк, но сумму таким образом лучше не считать, т.к. бока в реальной работе бедут.

К сумам претензий в моем случае нет. В первом варианте запроса все выводится как надоть...

Во втором случае нужон именон количество строк, удовлетвоаряющих критериям, описаным в хвосте запроса для алиасов таблицы games.

Попробую вставить этот дистинкт ...
...
Рейтинг: 0 / 0
22.11.2005, 16:33:52
    #33393010
martini
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
maXmoсначала получи строчечку, а уж потом кауны будем считать, ок?

Строчку я получаю первым запросом удачно. Вторым неудачно. ВЕСЬ МОЙ ВОПРОС и заключен в том, где же косяк второго запроса. Как сделать, чтобы он получал ту же строчку, только обогащенную этими самыми каунтами.

Мне нужен от второго запроса результат имеющий на 4 колонки больше, чем имеет результат первого. Я не знаю как это сделать.

Так что, получение "строчечки" и есть предмет моего вопроса.
...
Рейтинг: 0 / 0
22.11.2005, 16:44:02
    #33393045
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
значит, у тебя нет строчечек, удовлетворяющих условиям
Код: plaintext
1.
2.
AND games2.rez1 > games2.rez2
AND games3.rez1 < games3.rez2
AND games4.rez1 = games4.rez2
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.11.2005, 16:46:11
    #33393053
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
кстати, если один из этих резов при объединении получается нуллом, все твои строчечки летят к чертям :)
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.11.2005, 16:49:40
    #33393070
martini
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
distinct не помог.

Строчки вроде есть... Может быть не все одновременно. В этом дело да?

NULLов нет точно...

А как при отсутствии строчки по данному условию получить не отсутствие строки на выходе, а просто 0 в колонке?

Я чувствую, что уже понят :) Спасибо. Последний рывок к прозрению....
...
Рейтинг: 0 / 0
22.11.2005, 21:48:07
    #33393525
martini
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
Вы думаете, я опечатался и на самом деле я "понял"?
НЕТ! :( Не так.
Мне просто показалось, что МЕНЯ начали понимать. А проблема никуда так и не делась :( Мне по-прежнему нужна пощь...
...
Рейтинг: 0 / 0
23.11.2005, 01:56:54
    #33393653
max(id)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
Попробуй такой запрос :
Код: plaintext
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.
SELECT
  fusion_fifa_comands.id,
  fusion_fifa_comands.name,
  fusion_fifa_comands.user_id,
  fusion_fifa_comands.seria_id,
  fusion_fifa_comands.group_id,
  fusion_users.user_name,
  fusion_fifa_series.name AS s_name,
  fusion_fifa_groups.name AS g_name,
  fusion_fifa_groups.type AS g_type,
  SUM(fusion_fifa_games.rating) AS rating,
  SUM(fusion_fifa_games.rez1) AS zab,
  SUM(fusion_fifa_games.rez2) AS prop,
  COUNT(games1.id) AS games,
  COUNT(games2.id) AS win,
  COUNT(games3.id) AS loose,
  COUNT(games4.id) AS eqv
FROM fusion_fifa_comands
LEFT JOIN fusion_users
  ON fusion_users.user_id = fusion_fifa_comands.user_id
LEFT JOIN fusion_fifa_series
  ON fusion_fifa_series.id = fusion_fifa_comands.seria_id
LEFT JOIN fusion_fifa_groups
  ON fusion_fifa_groups.id = fusion_fifa_comands.group_id
LEFT JOIN fusion_fifa_games
  ON fusion_fifa_games.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games1
  ON games1.you = fusion_fifa_comands.id
LEFT JOIN fusion_fifa_games AS games2
  ON games2.you = fusion_fifa_comands.id
  AND games2.rez1 > games2.rez2 
LEFT JOIN fusion_fifa_games AS games3
  ON games3.you = fusion_fifa_comands.id
  AND games3.rez1 < games3.rez2 
LEFT JOIN fusion_fifa_games AS games4
  ON games4.you = fusion_fifa_comands.id
  AND games4.rez1 = games4.rez2 
WHERE fusion_fifa_comands.id='2'
GROUP BY fusion_fifa_comands.id
ORDER BY rating DESC
...
Рейтинг: 0 / 0
23.11.2005, 10:51:41
    #33394020
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внедрить в запрос несколько разных COUNT
martiniNULLов нет точно...не там ищешь.

martiniА как при отсутствии строчки по данному условию получить не отсутствие строки на выходе, а просто 0 в колонке?есть мнение, что можно формализовать любую сколь угодно навороченную логику, состоящую из операций И и ИЛИ. Это так, для развития.
Код: plaintext
1.
2.
AND (games2.rez1 isnull OR games2.rez2 isnull OR games2.rez1 > games2.rez2)
AND (games3.rez1 isnull OR games3.rez2 isnull OR games3.rez1 < games3.rez2)
AND (games4.rez1 isnull OR games4.rez2 isnull OR games4.rez1 = games4.rez2)
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как внедрить в запрос несколько разных COUNT / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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