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
,以填写用户的职务信息列表。好的,但我相信,然后根据我的操作方式,它将选择存在的每个类别,并将每个类别回显出来,选中和取消选中类别框,即使没有与这些类别一起列出的职务。