Mysql
 sql >> база данни >  >> RDS >> Mysql

Ограничете резултатите на GROUP_CONCAT() или INNER JOIN

Тези напреднали са това, което ме кара да обичам MySQL :)

SELECT user_id, user_name, 
    GROUP_CONCAT(CONVERT(photo_id, char(32)) ORDER BY photos.average_rate) as photo_ids
FROM (  SELECT user_id, user_name, photo_id, favorite_count, photo_count, 
            (case when @user_id = user_id then @rownum := @rownum + 1 else CONCAT(@rownum := 1, @user_id := user_id) end) AS dummy_val
        FROM (  SELECT users.user_id, users.user_name, users.favorite_count, users.photo_count, photos.photo_id
                FROM users 
                INNER JOIN photos
                ON photos.user_id=users.user_id
                WHERE users.day_of_birth = DATE_FORMAT('2012-04-17', '%m-%d') 
                    AND users.photo_count > 0 
                ORDER BY users.id ASC, photos.average_rate ASC
             ) AS h, 
             (  @rownum := NULL, 
                @user_id := NULL
             ) AS vars
        HAVING rownum <= 5) AS h2
GROUP BY user_id
ORDER BY favorite_count DESC, photo_count DESC LIMIT 0, 10

По принцип получавам всички редове и изхвърлям всички снимки, които са 6 или повече в изчислен номер на ред.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql Подреждане по фамилно име, когато пълното име за колона

  2. Чудна и досадна грешка:Извикване на недефинирана функция mysql_query()

  3. Може ли MySql 5.0 да има изглед на таблица, разположена на друг сървър

  4. Хибернация на SQL QUERY, проблем с типа данни TEXT в mysql

  5. MySQL сложна формулировка на подзаявка