Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ogranicz wyniki na GROUP_CONCAT() lub INNER JOIN

Te zaawansowane są tym, co sprawia, że ​​kocham 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

Zasadniczo otrzymuję wszystkie wiersze i wyrzucam wszystkie zdjęcia, które mają 6 lub więcej w obliczonej liczbie wierszy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z wyszukiwaniem pełnotekstowym MySQL 5.6 podczas wyszukiwania słowa the w PHP

  2. Kod błędu:1305. FUNKCJA lub PROCEDURA nie istnieje

  3. Używanie wyniku zapytania do innego zapytania za pomocą IN()

  4. Automatycznie generuj diagram bazy danych MySQL

  5. Uchwyt bazy danych DBI z funkcją AutoCommit ustawioną na 0 nie zwraca poprawnych danych za pomocą SELECT?