我有一个下拉菜单表单,如下所示:https://ibb.co/eX5BhH
每个选定的选项都会过滤查询并返回查询。到目前为止,我的“残疾”和“退伍军人”选项查询正确。我试图通过使用内部联接来使“资源类型”类别正常工作。这是sql命令:
SELECT shelter_name, shelter_address, disability, veteran
FROM shelter s
INNER JOIN shelter_type st ON s.shelter_id = st.shelter_id
INNER JOIN s_type stt on st.type_id = stt.type_id
WHERE type_name = "Charitable Organization";
此 sql 命令有效,但它仅查询“慈善组织”类别下的资源。用户将能够选择其他类别,因此我将其替换为“$value_4”,而不是“慈善组织”:
SELECT shelter_name, shelter_address, disability, veteran
FROM shelter s
INNER JOIN shelter_type st ON s.shelter_id = st.shelter_id
INNER JOIN s_type stt on st.type_id = stt.type_id
WHERE type_name = "$value_4";
这是我的 php 代码:
<?php
require'/Library/WebServer/Documents/Require/require.php';
$value_1 = $_POST["county"];
$value_2 = $_POST["disability"];
$value_3 = $_POST["veteran"];
$value_4 = $_POST["resources"];
$sql = "SELECT shelter_name, shelter_address, disability, veteran
FROM shelter s
INNER JOIN shelter_type st ON s.shelter_id = st.shelter_id
INNER JOIN s_type stt on st.type_id = stt.type_id
WHERE type_name = '$value_4'";
$result = mysqli_query($dbc, $sql) or die (mysql_error());
echo"<table border='1'>";
echo"<tr><td>Shelter</td><td>Address</td><td>Disability</td></tr>";
//iterate through the table
while ($row = mysqli_fetch_assoc($result)){
echo"<tr><td>{$row['shelter_name']}</td><td>{$row['shelter_address']}</td><td> {$row['disability']}</td><td>{$row['veteran']}</td></tr>";
}
echo"</table>"; //close table
echo"success";
?>
但是,当我使用“$value_4”时,该表不显示。如果我将其更改回“慈善组织”,该表将再次显示。当我使用“$value_4”时,我该怎么做才能显示我的表格?
最佳答案
我认为要解决此问题,您应该使用LEFT JOIN
而不是INNER JOIN
。
内连接期望左表和右表中的数据匹配。如果它只存在于左表而右表中不存在,则不会显示记录。
通过使用左连接,您表示您想要左表中的所有内容,然后如果右表(即您要加入的表)中有信息,则也将其带入。
可能值得一读this tutorial加入可帮助您获得更多经验。
关于php - php 使用内连接时无法显示查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49619448/