2011-12-20 37 views
-1

我有一个相当复杂的查询我正在运行,并且在我更改表结构并重写其他一些文件之前,我想知道是否有人可以告诉我这是否可能。我可以使用MySQL查询的SELECT部分​​中的AS为别名添加别名吗?

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."' 

我很高兴,如果有必要分享更多的代码,但是我在这里主要的问题是我能做到这一点首先作为语句之前从,甚至以后是否会工作。

+3

警告。你的代码可能会受到sql注入的影响。 – 2011-12-20 18:26:19

+0

这应该是单词。 MySQL文档在这里有一些信息:http://dev.mysql.com/doc/refman/5.5/en/problems-with-alias.html – hakre 2011-12-20 18:28:14

+0

@hakre什么?这应该?正如所写的,第二列在语法上不正确,不是吗? – 2011-12-20 18:33:21

回答

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."' 
+0

这似乎并没有工作 – Rooster 2011-12-20 19:09:41

+0

哦,等等,永不言弃是的,它表示感谢。并感谢他们实际回答问题,而不是评论什么是明确的示例查询。 – Rooster 2011-12-20 19:36:44

+0

@JohnB在所有应有的尊重下,各级技能和经验的用户都可以使用本网站。我不清楚你是否发布了一个示例查询,因此我的评论和答案。 – 2011-12-20 19:57:45

1

还有就是要有条件地指定列的输出方式,是:你用CASE声明。但它看起来不像你在做什么。你似乎是指定resiusers表,你可以正常完成使用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记录。

请详细说明您是否试图完成某些东西,而不是我在此处说明的内容。

+0

基本上,我正在寻找一个视线的成员。除了其他一些我没有列出的条件外,我还需要添加一些符合“WHERE place = state”和“where place = country”的曲调,用户在搜索表单上输入状态和国家作为输入,存储在同一个表中但分配了相同的user_id – Rooster 2011-12-20 18:34:33