Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT COUNT, help / 23 сообщений из 23, страница 1 из 1
23.04.2014, 17:31:42
    #38623505
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Есть таблица с одной колонкой. Мне нужно посчитать сколько раз встречается 'новость1','новость2' и т.д одним запросом.

------------
| id_news |
------------
| Новость1 |
| Новость2 |
| Новость1 |
| Новость3 |
| Новость5 |
| Новость6 |
| Новость1 |
------------

Вот мой пример:
Код: plsql
1.
SELECT COUNT(id_news) AS Count, id_news FROM rt_likes WHERE id_news IN ('новость1','новость2') group by id_news



Это работает.

Но как сделать когда в колонке нет нужной мне новости, сейчас просто не выводится если нет запрашиваемой новости в таблице


А нужно чтобы например если заправшиваю новость300 (ее нет допустим в таблице) то мне выводилось:

--------------------
| Новость3000 | 0 |
--------------------
...
Рейтинг: 0 / 0
23.04.2014, 17:41:02
    #38623523
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
http://sqlfiddle.com/#!2/1de58e/1
Код: sql
1.
2.
create table myTable (text varchar(100));
insert myTable values('news1'),('news2'),('news2'),('news1'),('news3'),('news1'),('news1'),('news5');

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select n.txt, count(t.text)qty
from(
  select 'news1' txt union all
  select 'news2' txt union all
  select 'news3' txt union all
  select 'news4' txt union all
  select 'news5' txt union all
  select 'news6' txt union all
  select 'news7' txt
  ) n
left join myTable t on t.text=n.txt
group by n.txt;
...
Рейтинг: 0 / 0
23.04.2014, 17:51:42
    #38623536
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Cygapb-007 http://sqlfiddle.com/#!2/1de58e/1
Код: sql
1.
2.
create table myTable (text varchar(100));
insert myTable values('news1'),('news2'),('news2'),('news1'),('news3'),('news1'),('news1'),('news5');

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select n.txt, count(t.text)qty
from(
  select 'news1' txt union all
  select 'news2' txt union all
  select 'news3' txt union all
  select 'news4' txt union all
  select 'news5' txt union all
  select 'news6' txt union all
  select 'news7' txt
  ) n
left join myTable t on t.text=n.txt
group by n.txt;



оставтес при себе свои джоины :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news1','news1' UNION ALL
select 'news1','news1' UNION ALL

)
...
Рейтинг: 0 / 0
23.04.2014, 17:52:31
    #38623538
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Cygapb-007 http://sqlfiddle.com/#!2/1de58e/1
Код: sql
1.
2.
create table myTable (text varchar(100));
insert myTable values('news1'),('news2'),('news2'),('news1'),('news3'),('news1'),('news1'),('news5');

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select n.txt, count(t.text)qty
from(
  select 'news1' txt union all
  select 'news2' txt union all
  select 'news3' txt union all
  select 'news4' txt union all
  select 'news5' txt union all
  select 'news6' txt union all
  select 'news7' txt
  ) n
left join myTable t on t.text=n.txt
group by n.txt;



оставтес при себе свои джоины :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news2','news2' UNION ALL
select 'news3','news3' UNION ALL
.....

)
group by id_news
...
Рейтинг: 0 / 0
23.04.2014, 17:53:39
    #38623542
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Cygapb-007,

большое спасибо работает, но есть вопрос. А если таблица состоит не из одной колонок а из двух?

-------------------------
| id_news | id_user |
-------------------------
| Новость1 | user2 |
| Новость2 | user3 |
| Новость1 | user1 |
| Новость3 | user5 |
| Новость5 | user1 |
| Новость6 | user2 |
| Новость1 | user7 |
-------------------------

как сделать выборку?
...
Рейтинг: 0 / 0
23.04.2014, 18:16:20
    #38623566
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
alex564657498765453оставтес при себе свои джоины :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news2','news2' UNION ALL
select 'news3','news3' UNION ALL
.....

)
group by id_news




Чего то ругается:

Код: plsql
1.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') group by id_news' at line 7
...
Рейтинг: 0 / 0
23.04.2014, 18:55:47
    #38623607
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
sce,

подозреваю, что вы лишний UNION ALL скопировали.
...
Рейтинг: 0 / 0
23.04.2014, 19:35:34
    #38623656
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
scealex564657498765453оставтес при себе свои джоины :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news2','news2' UNION ALL
select 'news3','news3' UNION ALL
.....

)
group by id_news




Чего то ругается:

Код: plsql
1.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') group by id_news' at line 7



ещо, для from (select ...) -!!! обязательным есть псевдоним. получишь эту ошибку когда юнион олл лишний уберёшь.

Код: sql
1.
2.
3.
4.
select ... from

(select union solect union... ) 'psevdonim'
group by...
...
Рейтинг: 0 / 0
23.04.2014, 20:03:19
    #38623699
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
alex564657498765453оставтес при себе свои джоины :)Нуте-ка поподробней про подсчет только нужных новостей, а не всех что в базе?
...
Рейтинг: 0 / 0
23.04.2014, 20:08:02
    #38623709
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
sceCygapb-007,

большое спасибо работает, но есть вопрос. А если таблица состоит не из одной колонок а из двух?

-------------------------
| id_news | id_user |
-------------------------
| Новость1 | user2 |
| Новость2 | user3 |
| Новость1 | user1 |
| Новость3 | user5 |
| Новость5 | user1 |
| Новость6 | user2 |
| Новость1 | user7 |
-------------------------

как сделать выборку?А что должно быть в результате?
...
Рейтинг: 0 / 0
23.04.2014, 20:15:46
    #38623723
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
alex564657498765453
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news2','news2' UNION ALL
select 'news3','news3' UNION ALL
.....

)
group by id_news

Почему такой минимализм? Решительнее надо подходить к решению решаемой задачи!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news, id_news, id_news, id_news, id_news, id_news from news UNION ALL
select 'news1','news1','news1','news1','news1','news1','news1' UNION ALL
select 'news2','news2','news2','news2','news2','news2','news2' UNION ALL
select 'news3','news3','news3','news3','news3','news3','news3'
)
group by id_news,id_news,id_news,id_news,id_news,id_news
...
Рейтинг: 0 / 0
23.04.2014, 20:18:02
    #38623726
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
PS. у FROM не указан алиас
...
Рейтинг: 0 / 0
23.04.2014, 20:42:54
    #38623752
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Cygapb-007,

я писал про алиас...

сударь, извольте признать что ваше решение правилное, моё ещо и красивое :)

ЗЫ
как то раз задача была, и по быстрому я решил как и ты, а счас глянул со стороны ...вот сразу идея родилась :) внатуре со стороны порой виднее :) а я вот про алиас сразу не заметил...
...
Рейтинг: 0 / 0
23.04.2014, 21:03:12
    #38623768
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Cygapb-007,

есть на входе массив новостей и user id

нужно получить следующее

id_news | count | user
--------------------------
news1 | 4 | true
news4 | 7 | false
news2 | 8 | true

и так далее

true или false это есть ли в таблице запись news1 | vasya

если нет нужной новости в базе то должно выдаваться

news100 | 0 | false

спасибо
...
Рейтинг: 0 / 0
23.04.2014, 21:55:46
    #38623800
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
sceесли нет нужной новости в базе Кто определяет/задает "нужность" новости?

В предположении, что нужны новости news001, news250, news130 и news004:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
  n.txt, 
  count(t.text)qty, 
  ifnull(max(t.id_user='vasya'),0) as `user`
from(
  select 'news001' txt union all
  select 'news250' union all
  select 'news130' union all
  select 'news004' 
  ) n
left join myTable t on t.text=n.txt
group by n.txt;
...
Рейтинг: 0 / 0
23.04.2014, 22:03:15
    #38623806
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
alex564657498765453сударь, извольте признать что ваше решение правилное, моё ещо и красивое :)На красавицу Ягу наглядеться не могу

Если "причесать" ваше решение, то "внезапно" выяснится, что список отбираемых новостей нужно задавать 2 раза: первый в where text in (<список>), и второй - в юнионах. Поэтому особо красивым его не назвал бы.

А так да, вполне допустимо.

PS. За грамотность - отдельный респект
...
Рейтинг: 0 / 0
23.04.2014, 23:06:35
    #38623833
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Cygapb-007sceесли нет нужной новости в базе Кто определяет/задает "нужность" новости?

В предположении, что нужны новости news001, news250, news130 и news004:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
  n.txt, 
  count(t.text)qty, 
  ifnull(max(t.id_user='vasya'),0) as `user`
from(
  select 'news001' txt union all
  select 'news250' union all
  select 'news130' union all
  select 'news004' 
  ) n
left join myTable t on t.text=n.txt
group by n.txt;



Список новостей какие нужны я буду задавать сам, в джава коде. Что то вроде такого:

Код: java
1.
2.
3.
4.
String s;
for (int i = 0; i < id_news.size(); i++){
   s = s + "select '" + id_news.get(i) + "' union all";
}
...
Рейтинг: 0 / 0
24.04.2014, 13:49:15
    #38624551
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Cygapb-007alex564657498765453сударь, извольте признать что ваше решение правилное, моё ещо и красивое :)На красавицу Ягу наглядеться не могу

Если "причесать" ваше решение, то "внезапно" выяснится, что список отбираемых новостей нужно задавать 2 раза: первый в where text in (<список>), и второй - в юнионах. Поэтому особо красивым его не назвал бы.

А так да, вполне допустимо.

PS. За грамотность - отдельный респект

у меня нету секции IN :)

а вообще я про алгоритм вычисления.

вы после своего джоина получите больший тоже что и я, только таблица плюс дописаных 7 строк, легче, чем для каждой из семи строк, находить походящую часть таблицы :) я про это красоту.

ЗЫ - по русскому всегда ставили 3, дабы не ставить 2, ибо был олимпиадником по физике химии математике и информатике. чем богаты тем и рады. :)
...
Рейтинг: 0 / 0
24.04.2014, 14:20:49
    #38624626
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
alex564657498765453у меня нету секции IN :)
Научитесь, что ли, решать поставленную , а не абстрактную задачу
...
Рейтинг: 0 / 0
24.04.2014, 15:15:19
    #38624775
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Cygapb-007, спасибо все работает, но есть проблема, если мне нужно получать не несколько id_news, а только одну.
Получается ошибка, выдает как будто бы есть 2 записи, хотя в таблице только 1
...
Рейтинг: 0 / 0
24.04.2014, 15:41:11
    #38624836
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
Разобрался, все ок:)
...
Рейтинг: 0 / 0
24.04.2014, 18:01:35
    #38625018
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
sceесть проблема, если мне нужно получать не несколько id_news, а только одну.
Получается ошибка, выдает как будто бы есть 2 записи, хотя в таблице только 1Может, оформить запрос немного по-другому?
Код: sql
1.
2.
3.
4.
5.
from(select 'news001' txt 
 union all select 'news250' 
 union all select 'news130' 
 -- union all select 'news004' 
) n


Вообще-то жаль, что нет возможности писать просто, как в MS SQL:
Код: sql
1.
2.
3.
from(values
  ('news001'),('news250'),('news130') -- ,('news004')
  ) n(txt)
...
Рейтинг: 0 / 0
25.04.2014, 13:06:06
    #38625654
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT, help
alex564657498765453сударь, извольте признать что ваше решение правилное, моё ещо и красивое
Может, и красивое. Но неправильное. Идеологически. И хреновосопровождаемое.

sceНо как сделать когда в колонке нет нужной мне новости, сейчас просто не выводится если нет запрашиваемой новости в таблице
Сервер может отдавать только те данные, которые у него есть. Судя по этому вопросу - где-то имеется таблица всех новостей. Вот её и нужно использовать в запросе.
А список конкретных новостей из всего набора может уже включаться в соотв. выражение секции отбора.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT COUNT, help / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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