首页 > 解决方案 > 根据用户设置的另一个表列值查询表列?

问题描述

我不确定这是否是最好的方法,但我有jobs一个用户可以在我的网站上搜索的表格。我想将用户过滤器设置保存在另一个名为filter_prefs.
我能想到的唯一方法是,当用户寻找工作时,我必须根据选择的类别选择工作类别并查询数据库中的工作。因此,当用户“取消选择”复选框时,它会删除列表,但不会删除复选框。同时,我将其存储为该0类别filter_pref列中,以便如果用户返回并加载作业,复选框将加载到网站上,但未选中,因此不会触发作业中该类别的查询。

      jobs                            filter_prefs
+-----+-----+----------+------+      +-----+------------+---------+--------+
| jid | pay | category | Title       | uid | Contractor | Teacher | Driver |
+-----+-----+----------+------+      +-----+------------+---------+--------+
|  5  | 15  |Contractor|Roofer|      |  4  |     0      |    1    |    1   |
|  6  | 20  |  Teacher |  Bio |      +-----+------------+---------+--------+
|  7  | 18  |  Driver  |  LTL |
+-----+-----+----------+------+  

我遇到的问题是,当我从表中查询类别时,我需要在filter_prefs表中查询在语句的第一个循环中查询的确切列,fetch这迫使我连接列的查询字符串。我一直在阅读这是 MySQL 自杀的原因。 这个可以吗?

$sql="SELECT DISTINCT category FROM jobs WHERE status='o'";
$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($category);
    while($stmt->fetch()){

$sql="SELECT '.$category.' FROM filter_prefs WHERE uid=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $_SESSION['uid']);
$stmt->execute();
$stmt->bind_result($status);
$product_cat ='';
    while($stmt->fetch()){
if($status==1){
$product_cat .= // MARK CHECKED, $CATEGORY AS TITLE.

}if($status==0){
$product_cat .= // MARK UNCHECKED, $CATEGORY AS TITLE.
}
}
}
echo $product_cat;

我对 MySQL 和 PHP 真的很陌生,所以我无法理解做这件事的不同方式。有没有更好的方法来存储用户偏好,将它们拉出来,然后影响网站的状态?我找不到任何显示如何做到这一点的材料。谢谢你。

标签: phpmysqlsqldatabasejoin

解决方案


filter_prefs应该是

   uid jid
   4   6
   4   7

这样用户的工作是:

SELECT uid, category
FROM filter_prefs
JOIN jobs
 USING jid

保持数据结构的逻辑性,使其易于查询,并使 php 表示层适应表示。

如果您从一行中提取一个字段并尝试将其映射到不同的表名,那么您做错了。


推荐阅读