Mysql SQL语句-如何对不同的选择使用多个CASE?
我对SQL非常熟悉,我正在使用PHP生成器软件进行快速应用程序开发 我有一个下拉列表,我需要为查找应用SQL语句,以填充下拉列表 如果这是Javascript,那么就很容易了,但不知道如何继续使用SQL 我的表格中有不同类型的项目,每个项目的类型可以是:Mysql SQL语句-如何对不同的选择使用多个CASE?,mysql,sql,case,Mysql,Sql,Case,我对SQL非常熟悉,我正在使用PHP生成器软件进行快速应用程序开发 我有一个下拉列表,我需要为查找应用SQL语句,以填充下拉列表 如果这是Javascript,那么就很容易了,但不知道如何继续使用SQL 我的表格中有不同类型的项目,每个项目的类型可以是: 'P' 'B' 'O' 'S' 当我打开一个项目时,它会加载它的信息,我需要根据项目类型填充此下拉列表 我的表格中的下拉列表是一个Tinyint 对于所选项目,我在全局变量中有ItemID(表中的PK),要从中检索该项目的类型,一个简单的SE
'P'
'B'
'O'
'S'
当我打开一个项目时,它会加载它的信息,我需要根据项目类型填充此下拉列表
我的表格中的下拉列表是一个Tinyint
对于所选项目,我在全局变量中有ItemID
(表中的PK),要从中检索该项目的类型
,一个简单的SELECT
应该可以:
SELECT ItemType
FROM TblItem
WHERE ItemID = [ItemID]
因此,通过这个选择现在我有了我的ItemType
现在,我需要根据ItemType填充下拉列表
使用Javascript,我可以执行以下操作:
switch(ItemType) {
case 'B':
// code block
break;
case 'P':
// code block
break;
case 'S':
// code block
break;
case 'O':
// code block
break;
}
对于每个案例代码块,我会使用不同的SELECT语句填充下拉列表,例如:
case 'B':
SELECT 0 AS TaskID, 'Installation' AS TaskName
UNION
SELECT 1 AS TaskID, 'Setup' AS TaskName
UNION
SELECT 2 AS TaskID, 'Feedback' AS TaskName
UNION
SELECT 3 AS TaskID, 'Customer' AS TaskName
case 'P':
SELECT 4 AS TaskID, 'Production' AS TaskName
UNION
SELECT 5 AS TaskID, 'Debug' AS TaskName
UNION
SELECT 6 AS TaskID, 'Review' AS TaskName
UNION
SELECT 7 AS TaskID, 'Network' AS TaskName
依此类推,所以每次打开一个项目的细节视图时,我在一个全局变量中检索ItemID
,然后我应该使用这个ID
来检索ItemType
,如上所示,最后,在SQL中实现某种CASE
语句来填充基于类型的下拉列表
谢谢SQL中的case语句用于一个非常不同的case:它在逐行的基础上进行case切换,而不是在查询级别
我认为,创建一个包含您希望存储在下拉列表中的项目的新表,然后使用itemId从该表中选择正确的行并填充下拉列表会容易得多。大概是这样的:
CREATE TABLE `dropdown` (
TaskID int(11) NOT NULL,
TaskName varchar(32) NOT NULL,
ItemID int(11) NOT NULL,
PRIMARY KEY(TaskID));
在这种情况下,您不必使用case语句,直接从表中选择所有必要的行。您甚至可以使用联接在一个查询中实现这一点。您可以使用内部联接
,将所有可能的下拉记录放入一个表中,正如我所说的tblDropDownItems
,当您使用过滤表TblItem
联接此表时,使用一个额外的列Reference-ItemType,您只有与检索到的项目类型相关的记录:
SELECT tblDropDownItems.TaskID, tblDropDownItems.TaskName
FROM
(SELECT 0 AS TaskID, 'Installation' AS TaskName, 'B' AS ItemType
UNION
SELECT 1 AS TaskID, 'Setup' AS TaskName, 'B' AS ItemType
UNION
SELECT 2 AS TaskID, 'Feedback' AS TaskName, 'B' AS ItemType
UNION
SELECT 3 AS TaskID, 'Customer' AS TaskName, 'B' AS ItemType
UNION
SELECT 4 AS TaskID, 'Production' AS TaskName, 'P' AS ItemType
UNION
SELECT 5 AS TaskID, 'Debug' AS TaskName, 'P' AS ItemType
UNION
SELECT 6 AS TaskID, 'Review' AS TaskName, 'P' AS ItemType
UNION
SELECT 7 AS TaskID, 'Network' AS TaskName, 'P' AS ItemType
UNION
. . . your select clause for 'S' ItemType
UNION
. . . your select clause for 'O' ItemType) tblDropDownItems
INNER JOIN
(SELECT ItemType
FROM TblItem
WHERE ItemID = [ItemID]) tblItemType
ON tblDropDownItems.ItemType = tblItemType.ItemType
最好只是重新设计表以包含该信息。@MatBailie如果授权在DB中重新设计表,最好在DB中有一个类似tblDropDownItems的表。SQL
中的CASE
操作符更像是一个立即if<代码>x=y时的情况,然后是a时的情况,然后是xy时的情况,然后是c时的情况,最后是d端
。它允许您编码标量值函数,而不是用于编程流控制,因此您只需在过程代码中使用IF
语句(在任何SELECT
语句之外)。您最好重构您的表,以便SELECT*FROM table WHERE itemID=?itemType=?
将为您提供所需的所有行以及所需的所有列。