Как вывести фотографии по рейтингу?

Discussion in 'PHP' started by superboy4, 28 Jan 2010.

  1. superboy4

    superboy4 Banned

    Joined:
    17 Jul 2007
    Messages:
    151
    Likes Received:
    19
    Reputations:
    -8
    Мне необходим ваш правильно составленный sql-запрос!
    Есть таблица pictures и ratings.

    Поля таблицы ratings ---> id, picture_id, rating, user_who_made_rating.


    Давайте!
     
  2. superboy4

    superboy4 Banned

    Joined:
    17 Jul 2007
    Messages:
    151
    Likes Received:
    19
    Reputations:
    -8
  3. superboy4

    superboy4 Banned

    Joined:
    17 Jul 2007
    Messages:
    151
    Likes Received:
    19
    Reputations:
    -8
    pictures содержит поля --> id,picture_file_name,picture_content_type

    Нужно отобразить топ 100 картинок с наиболее высоким рейтингом.
     
  4. superboy4

    superboy4 Banned

    Joined:
    17 Jul 2007
    Messages:
    151
    Likes Received:
    19
    Reputations:
    -8
    SELECT * FROM pictures INNER JOIN ratings ON ratings.picture_id=pictures.id ORDER BY SUM(ratings.rating)/COUNT(ratings.rating)

    выводит одну единственную картинку, в то время как в таблице ratings, рейтинги принадлежат 3 различным фотографиям :(
     
  5. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    LEFT JOIN
     
  6. superboy4

    superboy4 Banned

    Joined:
    17 Jul 2007
    Messages:
    151
    Likes Received:
    19
    Reputations:
    -8
    Можете хоть показать код, где это реализуется?
     
  7. superboy4

    superboy4 Banned

    Joined:
    17 Jul 2007
    Messages:
    151
    Likes Received:
    19
    Reputations:
    -8
    С LEFT JOIN всё равно одна фотка выводится
     
  8. REBUUS

    REBUUS Active Member

    Joined:
    6 Apr 2009
    Messages:
    314
    Likes Received:
    111
    Reputations:
    9
    может потому что стоит SUM и вот сумму и видает , попробуй группировать по pictures.id
     
  9. superboy4

    superboy4 Banned

    Joined:
    17 Jul 2007
    Messages:
    151
    Likes Received:
    19
    Reputations:
    -8
    не совсем тебя понял. GROUP BY pictures.id?
     
  10. REBUUS

    REBUUS Active Member

    Joined:
    6 Apr 2009
    Messages:
    314
    Likes Received:
    111
    Reputations:
    9
    да, в таблице рейтинга, там же у тебя записей много ? или у тебя для каждой картинки одна запись? если так то не надо группировать
     
  11. REBUUS

    REBUUS Active Member

    Joined:
    6 Apr 2009
    Messages:
    314
    Likes Received:
    111
    Reputations:
    9
    еще можешь попробовать сделать в вложенном селекте, стачало выполни в одном все арифметические действия и получи пока все записи, а потом в другом выбери их в отсортированный варианте , просто я сам в сложных запросах не сильно разбираюсь, могу только советы дать :)
     
    1 person likes this.
  12. superboy4

    superboy4 Banned

    Joined:
    17 Jul 2007
    Messages:
    151
    Likes Received:
    19
    Reputations:
    -8
    у мну несколько записей в таблице рейтингов, т.е для какой-то картинки таблицы pictures есть к примеру 3 записи в таблице ratings
     
  13. REBUUS

    REBUUS Active Member

    Joined:
    6 Apr 2009
    Messages:
    314
    Likes Received:
    111
    Reputations:
    9
    думаю нужен вложенный селекс в внутренно группируешь по по ид куртинки и суммируешь рейтинг а во внешнем уже выводишь в нужнем порядке, я не знаю как правильно синтаксический это написать, а то бы написал
     
  14. deedoc

    deedoc New Member

    Joined:
    12 Dec 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Поля таблицы ratings ---> id, picture_id, rating, user_who_made_rating.
    pictures содержит поля --> id,picture_file_name,picture_content_type

    SELECT TOP 100 p.picture_file_name FROM Pictures p
    JOIN Ratings r ON p.id = r.picture_id
    ORDER BY r.rating DESC;

    вернет тебе 100 самых "рейтинговых" картинок (а именно путей к ним)

    SELECT TOP 100 * FROM Pictures p
    JOIN Ratings r ON p.id = r.picture_id
    ORDER BY r.rating DESC;

    а вот так вернутся все данные из этих двух таблиц


    еще раз перечиталд ветку. так и не понял, зачем тебе кака-ято арифметика впринципе? у тебя есть данные о том, какой рейтинг у картинки (ratings.rating). если rating у одной картинки больше, чем у другой, то она "круче"... или у тебя по другому реализован подсчет рейтинга?
     
    #14 deedoc, 28 Jan 2010
    Last edited: 28 Jan 2010