0

このクエリには少し問題があります。それはうまく機能しますが、私はDRYのファンであり、これは簡単に改善できるようです:

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 句を追加することはできますか?

4

1 に答える 1

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
于 2012-12-19T11:20:56.953 に答える