2016-05-13 27 views
0

無法找到如何在克勞斯在不止一個欄 我有例子做這個查詢:凡在從PHP MySQL的陣列多列

$post = json_decode($HTTP_RAW_POST_DATA); 
$phoneNumbers = implode(",", $post->phones); 
$emails = implode(",", $post->emails); 

$sql = "SELECT phone_number,email,id FROM users WHERE phone_number,email IN (($phoneNumbers),($emails))"; 
$result = mysql_query($sql); 

Paramenters從反應後得到的,我需要將其與邏輯OR進行比較。 這個例子不適合我,結果不算什麼。 我該怎麼做。 THX

+0

它看起來就像你正在嘗試多列IN()一樣。是'電話,通過JSON email'received被解釋爲_pairs_等同於'WHERE(電話= 'PHONE1' 及email = 'EMAIL1')或(電話= 'PHONE2' 及email = 'EMAIL2')值的.. .'? –

+0

很久很久以前,PHP的mysql_ API已被棄用。 – Strawberry

+0

@Strawberry好的。 – GrumpyCrouton

回答

0
$post = json_decode($HTTP_RAW_POST_DATA); 
$phoneNumbers = $post->phones; 
$emails = $post->emails; 

$ors = []; 
foreach ($phoneNumbers as $i => $number) { 
    $ors[] = "(phone_number = :phoneNumber{$i})"; 
    $params[":phoneNumber{$i}"] = $number; 
} 

foreach ($emails as $i => $email) { 
    $ors[] = "(email = :email{$i})"; 
    $params[":email{$i}"] = $email; 
} 

$query = $pdo->prepare("SELECT phone_number, email, id FROM users WHERE ".implode(' OR ', $ors)); 
print_r($query); 
$query->execute($params); 
0

連接兩個WHERE INAND

SELECT phone_number, email, id FROM users WHERE phone_number IN ({$phoneNumbers}) AND email IN ($emails) 

如果您需要匹配電話號碼和電子郵件,不是生成查詢:

$ors = []; 

foreach ($phoneNumbers as $i => $number) { 
    $ors[] = "(phone_number = :phoneNumber{$i} AND email = :email{$i})"; 
    $params[":phoneNumber{$i}"] = $number; 
    $params[":email{$i}"] = $emails[$i]; 
} 

$query = $pdo->prepare("SELECT phone_number, email, id FROM users WHERE ".implode(' OR ', $ors)); 
$query->execute($params); 
+0

...除非電話和電子郵件被解釋爲一對在同一行.... –

+0

@MichaelBerkowski更新後的查詢 – Justinas

+0

Im sorry,Im更新答案,需要邏輯OR代替AND –

0
SELECT 
    phone_number, 
    email, 
    id 
FROM users 
WHERE phone_number IN ($phoneNumbers) 
    OR email IN ($emails) 
+0

這不工作 –

+0

你是什麼*不要」是什麼意思工作*任何錯誤?不是預期的結果? – Alex

+0

結果爲空 –