选择具有多行/相同列的语句 - WHERE有多个变量,并且是FROM相同的表

时间:2014-01-22 14:17:08

标签: php sql select

我刚刚意识到我可能在一些问题上错过了这条船。在我的网站的某些部分,我有$ sql变量,它们从同一个表中检索同一列的不同行的值,但在WHERE子句中有不同的变量:

$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')";

除了我不知道如何使用变量$ login_id1或$ login_id2从$ sqlAlt(使用mysqli_fetch_assoc或者其他一些函数)中提取login_id。

之类的东西
$result1 = $sqlAlt['login_id'] //WHERE $result1 is from $login_id1
$result2 = $sqlAlt['login_id'] //WHERE $result2 is from $login_id2

感谢您的帮助!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

在SQL中使用OR的一个查询中搜索login_ids:

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来进行数据库交互。从各个方面来看,它们是更好的方法。

答案 2 :(得分:0)

您想要运行此查询:

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

这将返回两个行,每行包含login_id列。你需要循环它们。

在此过程中,您还应该了解参数化查询以避免SQL注入攻击。