Php 根据用户设置的另一个表列值查询表列?

Php 根据用户设置的另一个表列值查询表列?,php,mysql,sql,database,join,Php,Mysql,Sql,Database,Join,我不确定这是否是最好的方法,但我有jobs表,用户可以在我的网站上搜索。我想将用户筛选设置保存在另一个名为filter\u prefs的表中。我能感觉到的唯一方法是,当用户查找作业时,我必须根据选择的类别选择作业类别,并查询数据库中的作业。因此,当用户“取消选择”复选框时,它会删除列表,但不会删除复选框。同时,我将其作为0存储在filter\u pref类别列中,这样,如果用户返回并加载作业,该复选框将加载到网站上,但未选中,因此不会触发对作业中该类别的查询 jobs

我不确定这是否是最好的方法,但我有
jobs
表,用户可以在我的网站上搜索。我想将用户筛选设置保存在另一个名为
filter\u prefs

的表中。我能感觉到的唯一方法是,当用户查找作业时,我必须根据选择的类别选择作业类别,并查询数据库中的作业。因此,当用户“取消选择”复选框时,它会删除列表,但不会删除复选框。同时,我将其作为
0
存储在
filter\u 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\u prefs
表中查询在语句的第一个
fetch
循环中查询到的确切列,该语句强制我连接该列的查询字符串。我一直在读这是怎样的自杀这样可以吗?

$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真的很陌生,所以我感觉不出有什么不同的方法来做。有没有更好的方法来存储用户偏好,将其取出,然后影响网站的状态?我找不到任何能说明如何做这件事的材料。谢谢。

您的
过滤器应该是

   uid jid
   4   6
   4   7
这样,用户的作业是:

SELECT uid, category
FROM filter_prefs
JOIN jobs
 USING jid
保持数据结构的逻辑性,以便于查询,并使php表示层适应表示


如果您从一行中取出一个字段并试图将其映射到另一个表名,则说明您做错了。

选择“.$category”。
<这不起作用。此处不应使用单引号,因为您传递的是字符串文字。此帖子在DBMS错误或目标的语句中不包含明确的表达式。你没有问一个明确的问题。这将是一个明确的声明。清除后,这将成为常见问题解答。在考虑发帖之前,请阅读本手册,谷歌搜索任何错误信息,或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。请在代码问题中给出一个--cut&paste&runnable代码;示例输入(作为初始化代码)以及所需和实际输出(包括逐字错误消息);标签和版本;清晰的说明和解释。对于包含最少代码的错误,您可以给出“显示为OK”的代码,并通过“显示为not OK”的代码进行扩展。(调试基础。)对于SQL,包括DDL和表格初始化。当你得到一个你意想不到的结果时,找出你的误解是什么。--分离出第一个错误的子表达式及其输入和输出。(调试基础。)我真的不明白为什么表过滤器的结构应该是这样的。每个作业都有一个类别,可以有多个具有相同类别的作业。如果有10000个用户和3000个作业,为什么我要将jid与uid关联?请澄清!
filter\u prefs
中的
jid
将是一个职务类别<代码>工作
在您的问题中看起来像一个类别图。因此,我希望每个用户只有一组最小的类别。通过这种方式添加更多类别不需要更改表。jobs表应该是与工作相关的所有内容,例如位置、薪资、职称、职位等。我只是尽量简化它。每个工作都有一个类别,这就是为什么我要选择DISTINCT,因为它们可能是重复的。在这种情况下,我应该怎么做?
在整个大表上选择DISTINCT
,因为您声明获取类别是一种浪费。使用简单的
job\u category\u id
创建您自己的job categories表。使用该选项填充复选框,并在此表上加入
JOIn
,以填写用户的职务信息列表。好的,但我相信,然后根据我的操作方式,它将选择存在的每个类别,并将每个类别回显出来,选中和取消选中类别框,即使没有与这些类别一起列出的职务。