実行しようとしているクエリに問題があります。クエリは3つの別々の選択クエリを取得しますが(各クエリはそれ自身で動作します)、すべてを1つの結果に連結することに固執しています。 2つの選択肢には同じフィールドが含まれていますが、3番目のフィールドには異なるフィールドが含まれています。クエリを2つの別々のフィールドに分割するのではなく、分でそれは私にエラー1241を与えています。異なるフィールド名を持つSQLの複数選択クエリ?
私は1番目と3番目のSELECT文を結合するとうまく動作しますが、明らかに中間のクエリには異なるフィールド名とデータが出てきます。あなたが配列の配列にSQLデータを抽出できるかどうかは分かりませんでしたが、もっと簡単でした!
歓声、アンドリュー
SELECT(
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email`, `cas_users`.`meta`, `cas_users`.`id`
FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '0'
AND `cas_users`.`expiry` > '1331165519'
) AS `c_p`, (
SELECT `name`, `email`, `phone`, `invited`
FROM `cas_not_connected`
WHERE `employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
) AS `nc`, (
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email`, `cas_users`.`meta`, `cas_users`.`id`
FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '1'
AND `cas_users`.`expiry` < '1331165519'
) AS `c_e`
EDIT:
これは私が最後に働いてしまったコードでは、完全な外部結合の回避策を利用しました。おそらく、過剰なものですが、私が必要とするすべてのデータを取得するために1回だけのデータベースのトリップを保証します。 LEFT_OUTER_JOINとRIGHT_OUTER_JOINがいる限り、彼らが一致しないことが保証されているとして何もすることができます。:
SELECT * FROM (
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email` AS `email1`, `cas_users`.`meta`, `cas_users`.`id` AS `id1`, `cas_connected`.`stage`
FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '0'
AND `cas_users`.`expiry` > '1331173687'
UNION
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email` AS `email1`, `cas_users`.`meta`, `cas_users`.`id` AS `id1`, `cas_connected`.`stage` FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '1'
AND `cas_users`.`expiry` < '1331173687')
AS `conn`
LEFT OUTER JOIN `cas_not_connected`
ON `conn`.`id1` = `cas_not_connected`.`name`
UNION
SELECT * FROM (
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email` AS `email1`, `cas_users`.`meta`, `cas_users`.`id` AS `id1`, `cas_connected`.`stage`
FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '0'
AND `cas_users`.`expiry` > '1331173687'
UNION
SELECT CONCAT_WS(' ', `cas_users`.`first_name`, `cas_users`.`last_name`) AS `name`, `cas_users`.`email` AS `email1`, `cas_users`.`meta`, `cas_users`.`id` AS `id1`, `cas_connected`.`stage` FROM `cas_users`
INNER JOIN `cas_connected`
ON `cas_connected`.`freelancer_hash` = `cas_users`.`hash`
WHERE `cas_connected`.`employer_hash` = 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35'
AND `cas_connected`.`stage` = '1'
AND `cas_users`.`expiry` < '1331173687')
AS `conn`
RIGHT OUTER JOIN `cas_not_connected`
ON `conn`.`id1` = `cas_not_connected`.`name`
また、これらのフィールドを空の値で偽装することもできますが、これにより、必要なものが得られない可能性があります。私が何を言及しているか説明する:3列の表と結合する2列の表がある場合、その列には一定の値を使用します。同様に:SELECT id、name、 'value'テーブルからの年齢 – Gimmy