2012-12-19 34 views
0

我对这个查询有点问题。它的伟大工程,但我干的粉丝,这看起来像它可以很容易地加以改进:将查询保存在变量中,然后添加where子句?

SELECT 
    users.*, 
    (
     SELECT user_information.value 
     FROM users 
     LEFT JOIN user_information 
     ON user_information.userid = users.id 
     WHERE user_information.name = 'account_name' 
    ), 
    (
     SELECT user_information.value 
     FROM users 
     LEFT JOIN user_information 
     ON user_information.userid = users.id 
     WHERE user_information.name = 'account_code' 
    ), 
    (
     SELECT user_information.value 
     FROM users 
     LEFT JOIN user_information 
     ON user_information.userid = users.id 
     WHERE user_information.name = 'account_id' 
    ), 
WHERE ... 

的部分:

SELECT user_information.value 
FROM users 
LEFT JOIN user_information 
ON user_information.userid = users.id 

恰恰是在每个子查询中的相同(会有将来约有10个子查询),但where子句每次都会改变。是否有可能将它保存在一个变量中,然后使用它,同时在mysql中追加每个不同的where子句?

回答

1

你可以加入user_information表查询和分组结果:

SELECT users.*, 
     GROUP_CONCAT(IF(i.name = 'account_name', i.value, NULL)), 
     GROUP_CONCAT(IF(i.name = 'account_code', i.value, NULL)), 
     GROUP_CONCAT(IF(i.name = 'account_id' , i.value, NULL)) 
FROM  users LEFT JOIN user_information AS i ON i.userid = users.id 
WHERE ... 
GROUP BY users.id