变量作为SELECT约束

时间:2014-03-07 17:43:14

标签: php sql select constraints

我正在设置一个包含数组作为SELECT sql语句约束的变量。但是,约束似乎只适用于数组中的一个数据。这是为什么?

以下代码:

<?php
include 'connection.php';

$Date = $_POST['date'];
$Unavail = 0;
$Avail = 0;
$Availid = 0;
$low = 99999;


$query = "SELECT username FROM daysoff WHERE date = '$Date'";               
$dayresult = mysql_query($query);                                                         
while($request = mysql_fetch_array($dayresult)) {                           
    $Unavail = $request;
    echo "<span>" . $Unavail['username'] . " is unavailable.</br>";
}   

$query1 = "SELECT Username, name, work_stats FROM freelance WHERE Username != '$Unavail[username]'";
$dayresult1 = mysql_query($query1);                                                      
while($request1 = mysql_fetch_array($dayresult1))   {
        echo "<span>" . $request1['name'] . " is available.</br>";

if ($request1['work_stats']<=$low) {                                
    $low = $request1['work_stats'];                             
    $Availid = $request1['name'];
    }}
    echo "<span>" . $Availid . " is available on " . $_POST['date'] . " and is on workstat level " . $low . ".</span></br>";
?>  

输出在第一个回显中显示两个名称,但随后显示其中一个名称在第二个回声中可用(这些回声仅作为我测试的一部分), 非常感谢

1 个答案:

答案 0 :(得分:0)

第一个查询可以有多个结果。

SELECT username FROM daysoff WHERE date = '$Date'

假设有两行:DaveJohn

您只保留最后一条记录,因此Dave 似乎可用。

你应该做的事情如下:

$query = "SELECT username FROM daysoff WHERE date = '$Date'";               
$dayresult = mysql_query($query);       
$unavailable_users = array();                                                  
while($request = mysql_fetch_array($dayresult)) {                           
    $unavailable_users[] = $request["username"];
    echo "<span>" . $Unavail['username'] . " is unavailable.</br>";
}   

$query1 = "SELECT Username, name, work_stats FROM freelance
    WHERE NOT Username IN ('" . implode("','", $unavailable_users) . "')";
// etc  

或一次性使用LEFT JOIN

SELECT `Username`, `name`, `work_stats`
FROM `freelance`
    LEFT JOIN `daysoff` ON `freelance`.`Username` = `daysoff`.`username`
        AND `daysoff`.`date` = '$Date'
WHERE
    `daysoff`.`username` IS NULL