показать и отметить некоторые записи сверху

0

Мои целевые СУБД - это Oracle и MySQL

 SELECT
  users.*
  , hr_orders.position_label
  , hr_orders.is_boss
  , deps.label AS dep_label        -- preprocessor removes AS when using Oracle
  , users.id IN (?) AS show_on_top -- Oracle doesn't accept this IN thing
 FROM
  -- some joins here
 WHERE
  -- some filters

Можно ли предоставить кросс-СУБД эквивалент этого запроса?

UPDATE

Хорошо, это разрушает логику, парень до меня хотел всегда показывать некоторым пользователям сверху,

WHERE
    users.fake = 0
AND (
        users.id IN (?)
    OR
        -- some more detailed filters
    )
ORDER BY
    IF (users.id IN (?), 1, 2), users.label

где? это параметр, относящийся к верхним пользователям.

Это поле show_on_top необходимо для выделения верхних записей позже.

Поэтому, если я переведу IN в предложение where, будут выбраны только пользователи, показанные сверху, а не остальные.

Разделение запроса на два и объединение списка пользователей в коде по-прежнему выглядит уродливо для меня.

  • 0
    Вы пытались использовать orm как: доктрина?
  • 0
    да, eludia ORM, и это помогает выполнить этот неверный запрос для MySQL
Показать ещё 1 комментарий
Теги:

4 ответа

1
Лучший ответ

Вы должны поместить IN в предложение WHERE

SELECT
  users.*
  , hr_orders.position_label
  , hr_orders.is_boss
  , deps.label AS dep_label        
  , users.id  AS show_on_top 
 FROM
  -- some joins here
 WHERE
  -- some filters
  AND users.id IN (?,?,?)
1

Это должно работать:

WHERE users.id IN (?) AND 
  -- some filters
0

Если вы хотите, чтобы эти строки сверху, а не только эти строки, вам просто нужно поместить их в ORDER BY, а не в WHERE (или в SELECT).

Не знаю, будет ли это работать на MySQL, но это необходимо для Oracle

ORDER BY
    CASE WHEN users.id IN (?) then 1 else 2 end, users.label
0

Мне кажется, что этот запрос не будет работать и для mysql. Вы можете использовать "IN" только в части запроса "WHERE". В вашем примере это находится в списке полей. Можете ли вы предоставить полный запрос без комментариев внутри него?

  • 0
    Я вижу SELECT SQL_CALC_FOUND_ROWS users.*, users.id IN (-1,547,547,547,547) AS show_on_top 547 SELECT SQL_CALC_FOUND_ROWS users.*, users.id IN (-1,547,547,547,547) AS show_on_top в журнале MySQl, и ошибки нет. Очевидно, это сработало, и я бы переписал весь запрос
  • 0
    Хм, я никогда не видел ничего подобного. Даже если случайно mysql выяснит, как его обработать, этот синтаксис наверняка не переносим.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню