加入2表,其中customer_id = $ username

时间:2018-02-11 07:13:54

标签: php mysql

我正在开发一个使用php的洗衣服务系统。我有2个表,表客户和表票(这里有customer_id作为外键)。

所以我试图在用户登录后显示票证列表,包括来自表客户和表票证的数据。

我正在尝试加入2个表,其中customer_id作为链接加入..用于登录的用户名(使用$ session来存储登录客户的用户名)。这是我的代码:

$customerusername = $_SESSION['customerusername'];
$result = mysqli_query($conn,"SELECT * from TICKET INNER JOIN CUSTOMER ON TICKET.CUSTOMER_ID=CUSTOMER.CUSTOMER_ID 
                                        WHERE CUSTOMER_ID=(SELECT CUSTOMER_ID from CUSTOMER WHERE CUSTOMER_USER='$customerusername')");

然而我收到此错误警告:mysqli_fetch_array()期望参数1为mysqli_result,布尔值在下面的第一行中给出:

while($row = mysqli_fetch_array($result)){   //Creates a loop to loop through results
    $found_row = true;
    echo " <tr>
            <td>".$row['TICKET_ID']."</td>
            <td>".$row['TICKET_PICKUP']."</td>
            <td>".$row['TICKET_PTIME']."</td>
            <td>".$row['TICKET_DELIVERY']."</td>
            <td>".$row['TICKET_DTIME']."</td>
            <td>".$row['TICKET_STATUS']."</td>
            <td>RM ".$row['TICKET_PRICE']."</td>
            <td>".$row['PAYMENT_STATUS']."</td>
            </tr>";
    }
    if ($found_row == false) {
            echo "No Ticket Submitted";
        }

出了什么问题?

3 个答案:

答案 0 :(得分:1)

您必须在表上使用别名来指定具有相同名称的列,并避免出现模糊错误。

您的CUSTOMER_ID出现在您的两张桌子中。所以MySQL无法知道你在谈论哪一列。

您可以尝试这样的事情:

$customerusername = $_SESSION['customerusername'];
$result = mysqli_query($conn,
    "SELECT * from TICKET t 
     INNER JOIN CUSTOMER c ON t.CUSTOMER_ID=c.CUSTOMER_ID 
     WHERE t.CUSTOMER_ID=(SELECT CUSTOMER_ID from CUSTOMER WHERE CUSTOMER_USER='$customerusername')");

答案 1 :(得分:0)

where子句中的第二个'CUSTOMER_ID'是不明确的,因此查询引擎感到困惑。正如@syscall所提到的,您需要为表格设置别名。此外,您不需要React.createElement(LinkChart, {xDomainRange:[0, 100], ...}) 子句中的子查询。您已经可以访问customer表,因此只需在您的join中引用它:

WHERE

答案 2 :(得分:0)

您的查询中不需要第二个Select语句。当您已经加入客户表时,您可以执行以下操作:

$customerusername = $_SESSION['customerusername'];

$result = mysqli_query($conn,
"SELECT * from TICKET t 
 INNER JOIN CUSTOMER c ON t.CUSTOMER_ID=c.CUSTOMER_ID 
 WHERE c.CUSTOMER_USER="'.$customerusername.'")";