我需要一个应用程序中的SELECT语句的帮助,我将称之为’app_Update_Users’.此应用程序旨在更新Users表中的记录.应用程序代码引用了下表:
>国家
>县
>组织
>用户
States表包含美国所有50个州的名单. Counties表包含加利福尼亚州的58个县的列表.组织表包含可能位于任何州且在一个或多个加利福尼亚州提供服务的组织列表.在添加或更新用户记录时,我想根据组织的状态以及它们提供服务的县或县来过滤组织列表.
该应用程序有三个select-type语句,用于在Users记录中创建属性的选项列表.我编写了适用于前两个语句的代码,但我遇到了第三个语句的代码问题.这些语句引用的字段是:
– uState
– uCounty
– uOrganization
uState和uCounty字段的语句调用onChange Ajax处理来更新uOrganization字段的选项列表上的选择.使用以下代码选择前两个字段的选项列表选项:
对于uState字段:
SELECT stAbbr, CONCAT(stAbbr, ' - ', stStatePK)
FROM States
ORDER BY stAbbr;
对于uCounty字段:
SELECT cCounty, cCounty
FROM Counties
ORDER BY cCounty;
组织表中的记录可以在oCounties字段中列出多个县,因为组织可以在多个县中运行.因此,当前使用以下代码选择uOrganization字段的选项列表选项:
SELECT oName
FROM Organizations
WHERE oCounties LIKE '%{uCounty}%'
ORDER BY oName ASC ;
我还可以使用以下代码根据它们所处的状态在“组织”表中选择记录:
SELECT oName, oName
FROM Organizations
WHERE oState = '{uState}'
ORDER BY oName ASC ;
但是,我想用于选择uOrganization字段选项的逻辑将组合这两个代码片段.用简单的英语,它会是这样的:“如果uState字段设置为’California’,则根据uCounty字段中的值从Organizations表中选择记录.如果uState字段未设置为’California’ ,然后根据uState字段中的值从Organizations表中选择记录.
以下IF. . .然后 . . . ELSE语法得到了重点,但它不起作用:
IF uState = 'CA' THEN
SELECT oName, oName
FROM Organizations
WHERE oCounties LIKE '%{uCounty}%'
ORDER BY oName ASC ;
ELSE
SELECT oName, oName
FROM Organizations
WHERE oState = '{uState}'
ORDER BY oName ASC ;
ENDIF
编写此代码的正确方法是什么?
解决方法:
没有带有单个语句的if,你可以这样做:
SELECT oName, oName
FROM Organizations
WHERE (ustate = 'CA' and oCouties like '%{uCounty}%') or
(uState <> 'CA' and oState = '{uState}')
ORDER BY oName ASC ;
标签:mysql,select,if-statement
来源: https://codeday.me/bug/20190620/1245726.html