SP: случайные записи, любимая запись, плюс известная запись, повторений нет - PullRequest
0 голосов
/ 21 июля 2009

Благодаря помощи многих из вас, ребята, я получил следующий код, который прекрасно работает. Однако я понял, что пропустил важную часть информации вне вопроса и поэтому разместил здесь (с обновленным кодом), чтобы уточнить.

Следующий код получает 5 случайных записей из таблицы плюс еще одну запись на основе избранного пользователя, как указано во второй таблице:

CREATE PROCEDURE web.getRandomCharities
   (
   @tmp_ID bigint --members ID
   )
AS
BEGIN

    WITH    q AS
     (
     SELECT  TOP 5 *
     FROM    TBL_CHARITIES
     WHERE   cha_Active = 'TRUE'
             AND cha_Key != '1'
     ORDER BY NEWID()
     )
SELECT  *
FROM    q
UNION ALL
SELECT  TOP 1 *
FROM    (
     SELECT  *
     FROM    TBL_CHARITIES
     WHERE   TBL_CHARITIES.cha_Key IN
             (
             SELECT  members_Favourite
             FROM    TBL_MEMBERS
             WHERE   members_Id = @tmp_ID
             )
     EXCEPT
     SELECT  *
     FROM    q
     ) tc

END

Однако я понял, что мне также нужно включить запись, где "cha_Key == '1'", если она не совпадает с записью, возвращенной во втором операторе SELECT в коде, показанном выше.

Надеюсь, что имеет смысл?

СПАСИБО !!!

1 Ответ

1 голос
/ 07 декабря 2009

Я не совсем уверен, что понимаю вас, но я верю, что это выглядит примерно так ...

Пять случайных записей без # 1 Одна пользовательская запись Запись № 1, если это НЕ конкретная запись пользователя.

Если это так, я считаю, что это делает:


CREATE PROCEDURE web.getRandomCharities
   (
   @tmp_ID bigint --members ID
   )
AS
BEGIN
    WITH    q AS
     (
     SELECT  TOP 5 *
     FROM    TBL_CHARITIES
     WHERE   cha_Active = 'TRUE'
             AND cha_Key != '1'
     ORDER BY NEWID()
     )
SELECT  *
FROM    q
UNION ALL
SELECT  TOP 1 *
FROM    (
     SELECT  *
     FROM    TBL_CHARITIES
     WHERE   TBL_CHARITIES.cha_Key IN
             (
             SELECT  members_Favourite
             FROM    TBL_MEMBERS
             WHERE   members_Id = @tmp_ID
             )
     EXCEPT
     SELECT  *
     FROM    q
     ) tc
UNION ALL
SELECT  TOP 1 *
FROM    (
     SELECT  *
     FROM    TBL_CHARITIES
     WHERE   TBL_CHARITIES.cha_Key NOT IN
             (
             SELECT  members_Favourite
             FROM    TBL_MEMBERS
             WHERE   members_Id = @tmp_ID
             )
        AND (TBL_CHARITIES.cha_Key = '1')
     EXCEPT
     SELECT  *
     FROM    q
     ) tc
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...