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

Wybierz wiersz i rzędy wokół niego

Tylko jedno ORDER BY Klauzula może być zdefiniowana dla UNION zapytam. Nie ma znaczenia, czy używasz UNION lub UNION ALL . MySQL obsługuje LIMIT klauzula dotycząca fragmentów UNION zapytanie, ale jest stosunkowo bezużyteczne bez możliwości zdefiniowania kolejności.

MySQL nie ma również funkcji rankingowych, które trzeba uzupełnić o luki w danych (brakujące z powodu usuwania wpisów). Jedyną alternatywą jest użycie zmiennej inkrementującej w instrukcji SELECT:

SELECT t.id, 
       @rownum := @rownum+1 as rownum 
  FROM MEDIA t, (SELECT @rownum := 0) r

Teraz możemy otrzymać kolejno ponumerowaną listę wierszy, więc możemy użyć:

WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2) 
                 AND @midpoint - ROUND(@midpoint/2) [email protected]

Używając 7 jako wartości dla @midpoint, @midpoint - ROUND(@midpoint/2) zwraca wartość 4 . Aby uzyskać łącznie 10 wierszy, ustaw wartość @upperlimit na 10. Oto pełne zapytanie:

SELECT x.* 
  FROM (SELECT t.id, 
               @rownum := @rownum+1 as rownum 
          FROM MEDIA t, 
               (SELECT @rownum := 0) r) x
 WHERE x.rownum BETWEEN @midpoint - ROUND(@midpoint/2) AND @midpoint - ROUND(@midpoint/2) + @upperlimit

Ale jeśli nadal chcesz używać LIMIT , możesz użyć:

  SELECT x.* 
    FROM (SELECT t.id, 
                 @rownum := @rownum+1 as rownum 
            FROM MEDIA t, 
                 (SELECT @rownum := 0) r) x
   WHERE x.rownum >= @midpoint - ROUND(@midpoint/2)
ORDER BY x.id ASC
   LIMIT 10


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wstawia kontakty do bazy danych, ale nie chce duplikować już istniejącego kontaktu

  2. Zapobieganie wstrzykiwaniu SQL w Node.js

  3. Formatowanie daty do formatu czytelnego dla człowieka

  4. Zapytanie, aby znaleźć posty z dokładnym zestawem tagów (relacja wiele-do-wielu)

  5. usuwanie encji kaskadowo nie działających w relacji ManyToMany