是否可以在MYSQL SELECT语句中包含依赖于用户选择的条件?为了清楚起见编辑了一下。有这种作用的东西:
IF user *does A* SELECT * FROM myTable
IF user *does B* SELECT colB, colC, colD FROM myTable
ELSE SELECT * FROM myTable WHERE ID < 5
原文引用了专有的前端,但我只是想看看是否有一个单独的MYSQL查询解决方案。
我有一个MYSQL查询,它根据对列值的随机选择返回一个表的过滤视图。我想包括一个选项,以 * 返回所有 * 的表,如果该表 * 不 * 匹配的值从列或如果用户选择'显示全部'。大概是这样的:
有没有一种方法可以像这样使用ELSE:
SELECT colA FROM mytable
WHERE *userChoice* = colA
ELSE SELECT * FROM myTable
或者,我认为可以用case语句来完成,但我不知道语法:
CASE
WHEN userPick = colA THEN SELECT colA FROM myTable
WHEN userPick = colB THEN SELECT colB FROM myTable
WHEN userPick = selectAll THEN SELECT * FROM myTable
ELSE SELECT * FROM myTable
END
我想在查询中添加一个子句,如果用户没有从colA中选择一个独特的值,它将允许我返回其他内容。
3条答案
按热度按时间bakd9h0s1#
你需要建立查询字符串,检查这个线程Mysql dynamically build query string in a stored procedure based on logic
像这样的查询
wsewodh22#
我找到了一个变通方法,添加了一个SelectAll列,并在SELECT查询中引用该列
ldioqlga3#
如果是编译语句,则不能更改列数。
select
语句应该返回相同数量的列。您可以做的是返回所有可能的列,并使用联合构造来启用具有特定where条件的选择。通过这种方式,您可以使用不同的表、不同的where条件-甚至不同的列,如果您的处理逻辑可以处理的话。关键是联合中的所有选择必须返回相同数量的列,因此您需要返回
null
作为占位符。第一个选择必须定义所有列别名,尤其是当值为null时。注意,您不需要
userPick = selectAll
分支,因为它与ELSE
部分相同。