Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: SQL счетчик

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: SQL счетчик
Jewish-Man
Отправлено: 30 Сентября, 2011 - 14:12:26
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Столкнулся с такой проблемой. Есть две таблицы - slug с полями ID слага и идентификатора имени пользователя ID_user, вторая - users, у нее поля - имя пользователя username и идентификатора пользователя ID. У каждого пользователя один и больше слагов. Как вывести ТОП скажем пяти пользователей, у которых максимально совпадают слаги(по количеству общих слагов) с пользователем username='Vasya', пусть будет по тому же убыванию.

У меня есть идея - вывести на первом этапе слаги пользователя 'Vasya', потом считать для каждого пользователя, сколько слагов входит в данное множество слагов пользователя 'Vasya', ну а потом уже выполнять сортировку. Но только формат непонятен.

Кто знает, куда копать или решение оптимальнее, отпишитесь.
Заранее спасибо.
 
 Top
MrBeard
Отправлено: 30 Сентября, 2011 - 14:41:42
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




Вообще не уверен, что это будет работать, тем более правильно, но...
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT users.id, users.username, count(slug.id) AS slugCount
  2. FROM slug
  3. JOIN users ON users.id = slug.user_id
  4. GROUP BY slug.user_id
  5. ORDER BY slugCount
  6. HAVING slugCount =>
  7.     (SELECT count(slug.id) AS userSlugCount
  8.     WHERE username = 'Vasya'
  9.     GROUP BY slug.user_id)
  10. LIMIT 50)
  11. UNION
  12. (SELECT users.id, users.username, count(slug.id) AS slugCount
  13. FROM slug
  14. JOIN users ON users.id = slug.user_id
  15. GROUP BY slug.user_id
  16. ORDER BY slugCount DESC
  17. HAVING slugCount <
  18.     (SELECT count(slug.id) AS userSlugCount
  19.     WHERE username = 'Vasya'
  20.     GROUP BY slug.user_id)
  21. LIMIT 50)


Вечером, когда время будет, проверю и может придумаю что лучше(а может, тут ответят правильно=) )

(Отредактировано автором: 30 Сентября, 2011 - 14:43:30)

 
 Top
MrBeard
Отправлено: 30 Сентября, 2011 - 17:20:44
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




мой код ещё не закидали какашками? удивительно)

кстати, советовал бы завести отдельную табличку, где хранить количество slug для каждого пользователя и при добавлении в таблицу slug нового значения(или удаления) инкрементировать счётчики в этой статистической таблице.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB