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
Форумы портала PHP.SU :: Версия для печати :: SQL счетчик
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » SQL счетчик

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

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

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

Кто знает, куда копать или решение оптимальнее, отпишитесь.
Заранее спасибо.
2. MrBeard - 30 Сентября, 2011 - 14:41:42 - перейти к сообщению
Вообще не уверен, что это будет работать, тем более правильно, но...
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)


Вечером, когда время будет, проверю и может придумаю что лучше(а может, тут ответят правильно=) )
3. MrBeard - 30 Сентября, 2011 - 17:20:44 - перейти к сообщению
мой код ещё не закидали какашками? удивительно)

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

 

Powered by ExBB FM 1.0 RC1