2014-01-22 157 views
0

我剛剛意識到我可能錯過了一些我的疑問。在我的網站的某些部分我有一個從同一個表的同一列的不同行檢索值$ SQL變量,但必須在WHERE子句中不同的變量:Select statement with multiple rows/same column - WHERE has multiple variables and FROM FROM same table

$sql1 = "SELECT login_id FROM login WHERE login_id = '$login_id1'"; 
$sql2 = "SELECT login_id FROM login WHERE login_id = '$login_id2'"; 

$result1 = mysqli_fetch_assoc(mysqli_query($con,$sql1)); 
$result1a = $result1['login_id']; 

$result2 = mysqli_fetch_assoc(mysqli_query($con,$sql2)); 
$result2a = $result2['login_id']; 

因爲我來自同一個表中選擇,是不是有一些方法來結合$ sql1和$ sql2以及$ result變量,如下所示?

$sql = "SELECT login_id FROM login WHERE login_id = '$login_id1' AS 'first', login_id = 
'$login_id2' AS 'second'"; 

$result = mysqli_fetch_assoc(mysqli_query($con,$sql)); 
$result1 = $result['first']; //uses $login_id1 
$result2 = $result['second']; //uses $login_id2 

另一種方法是這樣的:

$sqlAlt = "SELECT login_id FROM login WHERE (login_id = '$login_id1' OR login_id = 
'$login_id2')"; 

只是我不知道我怎麼會從$ sqlAlt(使用mysqli_fetch_assoc或者是一些其他的功能)只提取LOGIN_ID使用變量$ login_id1或$ login_id2;像

$result1 = $sqlAlt['login_id'] //WHERE $result1 is from $login_id1 
$result2 = $sqlAlt['login_id'] //WHERE $result2 is from $login_id2 

感謝您的幫助!

回答

1

尋找在一個查詢都login_ids在你的SQL的OR

SELECT login_id FROM login WHERE login_id = '$login_id1' OR login_id = '$login_id2';

甚至

SELECT login_id FROM login WHERE login_id IN ('$login_id1', '$login_id2');

這將返回多個行。爲了得到這些,從mysqli_query()返回一個MySQL查詢結果,並檢查後,它是不是一個錯誤,擁有超過0行,你可以遍歷它在while()得到返回的行一次一個:

$result = mysqli_query($con,$sql) ; 
while ($row = mysqli_fetch_assoc($result)) { 
    $currentResult = $result['login_id'] ; 
} 

一旦你得到這個工作,認真考慮閱讀準備好的陳述和PDO爲您的數據庫交互。從各個方面來看,它們是更好的方式。

1
$sql = "SELECT login_id AS FIRST FROM login WHERE login_id = '$login_id1' 
UNION ALL 
SELECT login_id AS SECOND FROM login WHERE login_id = '$login_id2'"; 

http://www.w3schools.com/sql/sql_union.asp

+0

此查詢返回列名爲FIRST的兩行。這似乎不是OP要求的。 –

+0

好的,謝謝...我會試試這個。出於好奇,是你寫的數據庫查詢的$ sql語句,還是UNION是一個合併(在本例中)2個數據庫查詢的命令? –

+0

將兩個查詢合併爲一個:將它們作爲UNION ALL執行只會涉及1次通過數據庫而不是兩次。 –

0

你想運行此查詢:

SELECT login_id 
FROM login 
WHERE login_id in ('$login_id1', '$login_id2)'; 

這將返回行,每行一列login_id。你需要循環它們。

一路走來,您還應該瞭解參數化查詢以避免SQL注入攻擊。

相關問題