1

Тема: Запит до БД

Привіт усім!

SELECT *
FROM `forum_posts`
WHERE `forum_posts-users` IN (8,25,9,5)

Чи можливо дізнатися, скільки знайдено рядочків для кожного користувача? Це я пишу для CRON, щоб щоночі перераховував к-сть повідомлень кожного користувача на форумі)
Може якось через GROUP BY?

Буду вдячний за відповідь.

2

Re: Запит до БД

Використайте COUNT

Подякували: leofun011

3

Re: Запит до БД

yarko написав:

Використайте COUNT

Я знаю, що COUNT рахує к-сть записів. Але як підрахувати к-сть записів для кожного користувача?
Я може запроста це зробити: запит в циклі FOREACH, але так неправильно.

4

Re: Запит до БД

SELECT `forum_posts`, COUNT(`forum_posts`)
FROM `forum_posts`
GROUP BY `forum_posts`
WHERE `forum_posts-users` IN (8,25,9,5)

Здається, так.

5

Re: Запит до БД

koala написав:
SELECT `forum_posts`, COUNT(`forum_posts`)
FROM `forum_posts`
GROUP BY `forum_posts`
WHERE `forum_posts-users` IN (8,25,9,5)

Здається, так.

тоді в результаті один рядочок, де forum_posts-users=8 а решта ігнорує

Подякували: koala1

6

Re: Запит до БД

SELECT `u`.`users_id` , (

SELECT COUNT( `forum_posts-id` )
FROM `forum_posts`
WHERE `forum_posts`.`forum_posts-user` = `u`.`users_id`
) AS posts
FROM `users` `u`
WHERE `u`.`users_id`

так буде правильно?

7

Re: Запит до БД

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

8 Востаннє редагувалося VTrim (17.01.2015 10:14:35)

Re: Запит до БД

Тоді краще записуйте кількість постів на форумі у таблицю самого користувача.
Наприклад є таблиця users і є колонка forum_posts  і в ній  (через скрипт) при додаванні/видаленні повідомленяя на форумі оновлюйте її значення на +1/-1

Тоді для CRON'у просто виводьте інформацію по користувачам,типу

SELECT forum_posts FROM users

9

Re: Запит до БД

VTrim написав:

Тоді краще записуйте кількість постів на форумі у таблицю самого користувача.
Наприклад є таблиця users і є колонка forum_posts  і в ній  (через скрипт) при додаванні/видаленні повідомленяя на форумі оновлюйте її значення на +1/-1

Тоді для CRON'у просто виводьте інформацію по користувачам,типу

SELECT forum_posts FROM users

так і є
Якщо я адмін, і видаляю цілу тему, тоді всім користувачам, які писали в тему треба перерахувати к-сть повідомлень. Я заганяю ід  користувача, який написав у массив, потім видаляю ІД користувачів, які повторюються і оновлюю їм к-сть повідомлень

10

Re: Запит до БД

може треба курсор шось тіпа такого

DECLARE @userId INT 
DECLARE @foreach_user CURSOR 

SET @foreach_user = CURSOR fast_forward 
FOR SELECT id 
    FROM   users 

OPEN @foreach_user 

FETCH next FROM @foreach_user INTO @userId 

WHILE @@FETCH_STATUS = 0 
  BEGIN 
      UPDATE users 
      SET    postcount = (SELECT Count(*) 
                          FROM   posts 
                          WHERE  forum_post - users = @userId) 
  END 

CLOSE @foreach_user 

DEALLOCATE @foreach_user 

11

Re: Запит до БД

SELECT `forum_posts-users`, COUNT(*)
FROM `forum_posts`
GROUP BY `forum_posts-users`

а чому ви використовуєте і нижне підреслення і дефіс в назві поля?

12

Re: Запит до БД

Vo_Vik написав:

SELECT `forum_posts-users`, COUNT(*)
FROM `forum_posts`
GROUP BY `forum_posts-users`

а чому ви використовуєте і нижне підреслення і дефіс в назві поля?

Щоб ворог не здогадався!