Выполнить оператор Select на основе условий и пользовательского ввода MySQL - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь разрешить выполнение конкретного оператора SELECT на основе определенной строки, отправленной в условие IF.Например, если пользователь выбирает поддержку из выпадающего списка, переменный ключ отправляется в оператор SQL, и выполняется соответствующий оператор SELECT.

DECLARE @ strg
SET @strg = 'input string'
IF(SELECT * FROM tickets WHERE ticket_section = @strg)
BEGIN
SELECT
usr_users.uname AS `user`,
support_chat_user.message AS user_message,
support_chat_user.created AS user_chat_date,
support_ticket.`subject` AS ticket_subject,
support_ticket.`status` AS ticket_state,
support_ticket.created AS ticket_date,
support_ticket.modified AS updated_date,
tickets.state
FROM
tickets
INNER JOIN support_chat_user ON support_chat_user.tickets_id = tickets.tick_id
INNER JOIN support_ticket ON support_ticket.tickets_id = tickets.tick_id
INNER JOIN usr_users ON support_chat_user.reporter_id = usr_users.uid
WHERE
tickets.tick_id = '9' AND
usr_users.uid = '1'
END

IF EXISTS(SELECT * FROM tickets WHERE ticket_section = @strg)

BEGIN
SELECT
usr_users.uname AS `user`,
support_chat_user.message AS user_message,
support_chat_user.created AS user_chat_date,
support_ticket.`subject` AS ticket_subject,
tickets.state
FROM
tickets
INNER JOIN support_chat_user ON support_chat_user.tickets_id = tickets.tick_id
INNER JOIN support_ticket ON support_ticket.tickets_id = tickets.tick_id
INNER JOIN usr_users ON support_chat_user.reporter_id = usr_users.uid
WHERE
tickets.tick_id = '9' AND
usr_users.uid = '1'

END

1 Ответ

0 голосов
/ 06 октября 2018

MySQL не поддерживает IF, если вы не поместите код в программный блок.Ваш вопрос немного сложен для понимания, потому что в тексте упоминается один запрос, но код из двух, которые кажутся идентичными.

Вы можете переместить условную логику в самое крайнее предложение WHERE в вашем запросе:

SELECT u.uname AS `user`, scu.message AS user_message, scu.created AS user_chat_date,
       st.`subject` AS ticket_subject, st.`status` AS ticket_state, st.created AS ticket_date, st.modified AS updated_date,
       t.state
FROM tickets t JOIN
     support_chat_user scu
     ON scu.tickets_id = t.tick_id JOIN
     support_ticket st
     ON st.tickets_id = t.tick_id JOIN
     usr_users u
     ON scu.reporter_id = u.uid
WHERE t.tick_id = 9 AND  -- presumably this is not numeric
      u.uid = 1 AND      -- presumably this is not numeric
      EXISTS (SELECT 1 FROM tickets t2 WHERE t2.ticket_section = @strg)

Я не уверен, что это то, чего вы действительно хотите.Я подозреваю, что вы хотите:

WHERE t.tick_id = 9 AND  -- presumably this is not numeric
      u.uid = 1 AND      -- presumably this is not numeric
      (t.ticket_section = @strg OR @strg IS NULL)

Однако это просто обоснованное предположение о том, что было бы полезно в описываемой вами ситуации.

Примечания:

  • Таблицапсевдонимы облегчают написание и чтение запроса (как и правильные отступы).
  • Числовые константы не следует вводить в одинарных кавычках.Я предполагаю, что идентификаторы действительно числа.Если они являются строками, то одинарные кавычки являются подходящими.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...