gpt4 book ai didi

php - 如何连接两个表以便我可以使用过滤器来查询两个表

转载 作者:行者123 更新时间:2023-11-29 09:26:49 25 4
gpt4 key购买 nike

我有 2 张表,一张名为“ads”,一张名为“users”。我在每个中存储了不同的数据。 ads.ad_user 列使用 users 表中的 users.user_id 进行填充。如何构建查询以便可以过滤两个表中的数据。

这是我构建的查询,但它不允许我独立过滤两个表中的数据。

<div class="col-xs-6 col-sm-6">
<div class="form-group">
<label for="ethnicity">ETHNICITY</label>
<select class="form-control ethnicitySelect" id="ethnicity" onchange="searchFilter();">
<option selected disabled>Ethnicity...</option>
<option value="ethnicityall">All</option>
<option value="other">Other</option>
</select>
</div>

<div class="form-group" style="padding:5px;color:#333;">
<label for="citySelect">LOCATION</label>
<select class="form-control citySelect" id="citySelect" onchange="searchFilter();">
<optgroup label="State">
<option disabled selected>Select A City</option>
</select>
</div>


$querySelectCount = "SELECT COUNT(ads.ad_id) as rowNum,
ads.ad_id,
ads.ad_title,
ads.ad_content,
ads.ad_date,
ads.ad_user,
ads.ad_photo,
ads.ad_photo_thumb,
ads.ad_age,
ads.ad_city,
ads.ad_rate,
ads.ad_plan,
ads.ad_approved,
ads.adminPost,
users.user_id,
users.username,
users.user_picture,
users.userAge,
users.height,
users.hair,
users.ethnicity,
users.eyeColor,
users.type

FROM
ads
LEFT JOIN
users
ON
ads.ad_user = users.user_id

$usersSQL

WHERE
ads.ad_approved = '0'
$adsSQL $orderSQL
";

这是我正在使用的几个过滤器。

if(isset($_POST['city']) && !empty($_POST['city']) && $_POST['city'] !== 'null'){   
$city = $filter->filter($_POST['city']);
$whereSQL .= " AND ads.ad_city = :city ";
}else{
$city = 0;
$whereSQL .= " AND ads.ad_city >= :city ";
}


if(isset($_POST['ethnicity']) && !empty($_POST['ethnicity']) && $_POST['ethnicity'] !== 'null'){
$ethnicity = $filter->filter($_POST['ethnicity']);
if($ethnicity == "ethnicityall"){
$whereSQL .= "AND users.ethnicity != :ethnicity ";
}else{
$whereSQL .= "AND users.ethnicity = :ethnicity ";
}
}else{
$ethnicity = 0;
$whereSQL .= "AND users.ethnicity >= :ethnicity ";
}

我使用多个下拉菜单来过滤数据,例如:当我选择一个城市时,在我选择来自用户表的选项(例如种族、高度或眼睛颜色)之前,不会显示任何内容...实际上,我需要选择在显示任何数据之前完成上述所有操作。查询中的另一个 SELECT 会帮助我实现我想要做的事情吗?谢谢。

这也是我正在应用的过滤器 enter image description here

这是从 ads 表中选择一个项目和从 users 表中选择一个项目后的查询图片 enter image description here

这是更新后的查询的打印输出

object(PDOStatement)#5 (1) { ["queryString"]=> string(973) "选择 COUNT(ads.ad_id) 作为 rowNum、ads.ad_id、ads.ad_title、ads.ad_content、ads.ad_date 、 ads.ad_user、 ads.ad_photo、 ads.ad_photo_thumb、 ads.ad_age、 ads.ad_city、 ads.ad_rate、 ads.ad_plan、 ads.ad_approved、 ads.adminPost、 users.user_id、 users.username、 users.user_picture、 用户.userAge、users.height、users.hair、users.ethnicity、users.eyeColor、users.type FROM ads LEFT JOIN users ON ads.ad_user = users.user_id AND users.ethnicity != :ethnicity AND users.eyeColor != :eyeColor AND users.hair != :hairColor AND users.height >= 0 WHERE ads.ad_approved = '0' AND ads.ad_city = :city AND ads.ad_rate > = 0 AND ads.ad_content LIKE :keywords ORDER BY ad_date DESC "}

最佳答案

可能您需要使用 LEFT JOIN 而不是 INNER,那么您可以将 users 表的条件添加到 ON 语句

LEFT JOIN users ON ads.ad_user = users.user_id AND users.ethnicity = :ethnicity
WHERE ads.ad_city = city

然后他们将独立工作

关于php - 如何连接两个表以便我可以使用过滤器来查询两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59465309/

25 4 0