我有一个相当复杂的查询运行,在我更改表结构并重写其他文件之前,我想知道是否有人可以告诉我这是否可行。
SELECT
DISTINCT(users.user_id),
(resi.curr_state WHERE resi.user_id = "users.user_id") AS current_state
FROM
ci_users AS users, ci_residents AS resi .....
WHERE stuff HAVING current_state = '".$php_variable_ill_use."'
我很乐意在必要时分享更多代码,但我的主要问题是我是否可以在发布之前或之后首先作出声明,如果它可行的话。
答案 0 :(得分:1)
这样的事可能有用:
select distinct(users.user_id),
(select resi.curr_state
from ci_residents
AS resi_1 where resi_1.user_id = users.user_id) as current_state
FROM
ci_users AS users, ci_residents AS resi .....
WHERE stuff HAVING current_state = '".$php_variable_ill_use."'
答案 1 :(得分:1)
有一种方法可以有条件地指定列的输出,是的:您使用CASE
语句。但它看起来并不像你正在做的那样。您似乎在指定resi
和users
表之间的关系,通常可以使用JOIN来完成,如下所示:
SELECT
DISTINCT(users.user_id),
resi.curr_state AS current_state
FROM ci_users AS users
JOIN ci_residents AS resi ON users.user_id = resi.user_id
现在,鉴于您的请求背后的逻辑,我假设您想要所有 user_ids,但只有那些存在状态的状态。那是对的吗?如果是,请使用LEFT JOIN
包含所有users
条记录,并在相关记录存在时仅包含resi
条记录。
请详细说明您是否正在尝试完成我在此处所说明的内容。