2016-06-30 1 views
1

MySQLクエリに問題があります。クエリの列の1つを使用してクエリをフィルタ処理しようとすると、行が存在しません。同様の表現がmysqlを動作させない

SELECT `Voucher`.`id`, `Voucher`.`name`, `Voucher`.`batch`, `Voucher`.`status`, `Voucher`.`perc_time_used`, `Voucher`.`perc_data_used`, 
`Voucher`.`last_accept_time`, `Voucher`.`last_reject_time`, `Voucher`.`last_accept_nas`, `Voucher`.`last_reject_nas`, `Voucher`.`last_reject_message`, 
`Voucher`.`user_id`, `Voucher`.`created`, `Voucher`. `modified`, `Voucher`.`extra_name`, `Voucher`.`extra_value`, `Voucher`.`password`, 
`Voucher`.`realm`, `Voucher`.`realm_id`, `Voucher`.`profile`, `Voucher`.`profile_id`, `Voucher`.`expire`, `Voucher`.`time_valid`, `Voucher`.`data_used`, 
`Voucher`.`data_cap`, `Voucher`.`time_used`, `Voucher`.`time_cap`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'gender' AND voucher_values.voucher_id = `Voucher`.`id`) AS `gender`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'residence' AND voucher_values.voucher_id = `Voucher`.`id`) AS `residence`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'age' AND voucher_values.voucher_id = `Voucher`.`id`) AS `age`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'nationality' AND voucher_values.voucher_id = `Voucher`.`id`) AS `nationality`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'email' AND voucher_values.voucher_id = `Voucher`.`id`) AS `email`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'facebookid' AND voucher_values.voucher_id = `Voucher`.`id`) AS `facebookid`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'googleid' AND voucher_values.voucher_id = `Voucher`.`id`) AS `googleid`, 
(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'interests' AND voucher_values.voucher_id = `Voucher`.`id`) AS `interests`, 
`User`.`id`, `User`.`username`, `User`.`password`, `User`.`token`, `User`.`name`, `User`.`surname`, `User`.`address`, `User`.`phone`, `User.email`, 
`User`.`active`, `User`.`monitor`, `User`.`country_id`, `User`.`group_id`, `User`.`language_id`, `User`.`parent_id`, `User`.`lft`, `User`.`rght`, 
`User`.`created`, `User`.`modified` 
FROM `rd`.`vouchers` AS `Voucher` LEFT JOIN `rd`.`users` AS `User` ON (`Voucher`.`user_id` = `User`.`id`) 
WHERE `User`.`id` IN (58,59) AND `email` LIKE '%%' ORDER BY Voucher.name DESC LIMIT 100 OFFSET 0 

私の問題はWHERE句にある - より具体的にemail LIKE '%%'に。パーセンテージの間に何かを入れようとすると、クエリは行を返しません。そして、私が入れたキャラクターがそのフィールドにあることを知っています。

+1

%%とはどういう意味ですか? – scaisEdge

+0

%%は私がそれを取っても同じことをするなら、私が必要としないすべての電子メールです。 –

答えて

1

これが問題の原因かどうかはわかりませんが、LEFT JOINを入力すると、LEFT JOINの右側の表の条件はON句内にのみ指定する必要があります。

FROM rd.vouchers AS Voucher 
LEFT JOIN rd.users AS User 
ON (Voucher.user_id = User.id AND User.id IN (58,59)) 
WHERE email LIKE '%String%' 
ORDER BY Voucher.name DESC 
LIMIT 100 OFFSET 0 

Email列がusersテーブルに属している場合、それは問題だとあなたもON句に追加する必要があります。それがこの状態にあるときに返されるどのように多くの行

ON (Voucher.user_id = User.id 
    AND User.id IN (58,59) 
    AND email LIKE '%String%') 
ORDER BY Voucher.name DESC 
LIMIT 100 OFFSET 0 
+0

電子メール列は、クエリのサブクエリに表示されるように、voucher_valuesに属しているユーザーに属していません。(SELECT voucher_values.value FROM voucher_values WHERE voucher_values.attribute = 'email' AND voucher_values.voucher_id = 'Voucher'.' id')AS 'email' –

+0

これは相関クエリです。クエリを別のselectで囲み、' like'を外側に移動します。 – sagi

+0

私の助けを借りてくれてありがとう –

0

? (LIMITなし) %%の間に入れている文字は何ですか?

+0

応答は%%の間の文字なしで必要なすべての行です。私が入れたキャラクターは 's' –

関連する問題