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

Jak sprawić, by to zapytanie SQL wyprowadzało dwa wiersze, a nie dwa pola?

Nazywam to hackowaniem MySQL.

select @a as one
from
(

    SELECT @a := a.id, @b := b.id
    FROM Rankable a
    INNER JOIN Rankable b on a.id < b.id
    WHERE 
      a.category_id = ? AND b.category_id = ?
      AND NOT EXISTS (
        SELECT *
        FROM Comparison c
        WHERE c.lower_id in (a.id, b.id))
      AND NOT EXISTS (
        SELECT *
        FROM Comparison c
        WHERE c.higher_id IN (a.id, b.id))
    ORDER BY a.id * rand()
    LIMIT 1
) SQ
union all
select @b

Aby dołączyć do tabeli, aby uzyskać wszystkie inne kolumny:

select Rankable.*
from
(
    select 1 as Sort, @a as one
    from
    (

        SELECT @a := a.id, @b := b.id
        FROM Rankable a
        INNER JOIN Rankable b on a.id < b.id
        WHERE 
          a.category_id = ? AND b.category_id = ?
          AND NOT EXISTS (
            SELECT *
            FROM Comparison c
            WHERE c.lower_id in (a.id, b.id))
          AND NOT EXISTS (
            SELECT *
            FROM Comparison c
            WHERE c.higher_id IN (a.id, b.id))
        ORDER BY a.id * rand()
        LIMIT 1
    ) SQ
    union all
    select 2, @b
) X
INNER JOIN Rankable ON Rankable.Id = X.one
ORDER BY X.Sort


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ukończyć ten tunel SSH od lokalnego dokera programistycznego do tymczasowej bazy danych?

  2. SugarCRM — awaria bazy danych — zbyt duży rozmiar wiersza?

  3. Nie możesz połączyć się za pomocą mysql_connect z bazą danych w hostingu ipage.com?

  4. Dziwne znaki w mysql dbase

  5. Połączenie bazy danych MySQL w PHP