Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giới hạn kết quả trên GROUP_CONCAT () hoặc INNER JOIN

Những cái nâng cao này là điều khiến tôi yêu thích 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

Về cơ bản, tôi nhận được tất cả các hàng và loại bỏ tất cả các ảnh có kích thước từ 6 trở lên trong rownum được tính toán.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Những gì tôi cần làm để mở các URL có các ký tự đặc biệt

  2. Làm cách nào tốt nhất để lưu trữ ngày / giờ trong MySql?

  3. Lỗi cú pháp MySQL khi tạo bảng

  4. SQL Server 2008 R2 sang MySQL Migration

  5. Cách tiếp cận tốt nhất để thực hiện các truy vấn động (sử dụng PHP + MySQL) là gì?