SQL-запрос, выберите из 2 таблиц случайным образом - PullRequest
0 голосов
/ 07 января 2011

Привет всем, у меня проблема, что я просто не могу заставить работать так, как я ..

Я хочу показать новости и обзоры (2 таблицы), и я хочу иметь случайный вывод, а не товывод

вот мой запрос, я действительно надеюсь, что кто-то может объяснить мне, что я делаю не так

SELECT
                anmeldelser.billed_sti ,
                anmeldelser.overskrift ,
                anmeldelser.indhold ,
                anmeldelser.id ,
                anmeldelser.godkendt
            FROM
                anmeldelser
            LIMIT 0,6
            UNION ALL
            SELECT
                nyheder.id ,
                nyheder.billed_sti ,
                nyheder.overskrift ,
                nyheder.indhold ,
                nyheder.godkendt
            FROM nyheder
            ORDER BY rand() LIMIT 0,6

Ответы [ 3 ]

0 голосов
/ 07 января 2011

Проблема в том, что первая таблица не выбирает случайные элементы

SELECT temp.* FROM
(
  SELECT
    anmeldelser.id ,
    anmeldelser.billed_sti ,
    anmeldelser.overskrift ,
    anmeldelser.indhold ,
    anmeldelser.godkendt,
    'News' as artType
  FROM anmeldelser
  UNION 
  SELECT
    nyheder.id ,
    nyheder.billed_sti ,
    nyheder.overskrift ,
    nyheder.indhold ,
    nyheder.godkendt,
    'Review' as artType
  FROM nyheder
 ) temp
 ORDER BY rand() LIMIT 0,6
0 голосов
/ 07 января 2011

Поскольку RAND () появляется только в предложении ORDER BY, будет ли он вычисляться не только один раз для всего запроса, а не один раз для строки?

0 голосов
/ 07 января 2011

Во-первых, похоже, что порядок столбцов для двух операторов SELECT не совпадает с тем, который им необходим для UNION.

Что возвращает следующее?

        SELECT
            anmeldelser.billed_sti ,
            anmeldelser.overskrift ,
            anmeldelser.indhold ,
            anmeldelser.id ,
            anmeldelser.godkendt
        FROM
            anmeldelser
        LIMIT 0,6
        UNION ALL
        SELECT
            nyheder.billed_sti ,
            nyheder.overskrift ,
            nyheder.indhold ,
            nyheder.id ,
            nyheder.godkendt
        FROM nyheder
        ORDER BY rand() LIMIT 0,6

(какую СУБД вы используете? SQL-код, который вы используете, недопустим для Sybase, но могут быть методы, зависящие от «вкуса» используемого вами SQL)

...