我是PHP的新手,我正在尝试为我的工作创建一个小应用程序,但我现在已经停留了几天,因为我遇到了问题而我找不到溶液
我首先有2个表 jobs_userac ,其中包含3个字段:
id, user, jobsassigned
以及包含5个字段的第二个 jobs_data :
id, job_type, description, comments, client_name
jobs_data中的每一行都包含一个任务
1 - Offset - Blablablabla - Blablablabla - Chris
2 - Plotter - Blablablabla - Blablablabla - Nick
3 - Design - Blablablabla - Blablablabla - John
对于每个用户,我在jobs_userac中有一行,其中包含用逗号分隔的一个字段中的用户ID,用户名和分配作业。
1 - Chris - 1,2
2 - Peter - 2,4,5
2 - Maria - 4
每次连接用户时,我都会将用户ID存储到变量$ user中。 我想创建一个像这样的查询
$result = mysqli_query($con,"SELECT * FROM jobs_data");
但我想检查连接的用户是否在jobs_userac中有一行,例如,如果连接的用户是Chris,只向他显示job_type为1或2的task_data中的作业 如果已连接Maria,则显示job_type = 4的jobs_data中的行。 我想在我的查询中添加WHERE子句,如果用户在jobs_userac中分配了多个joob - > jobsassigned添加OR子句。
对于用户Maria
$result = mysqli_query($con,"SELECT * FROM jobs_data WHERE job_type=4");
对于用户Chris
$result = mysqli_query($con,"SELECT * FROM jobs_data WHERE job_type=1 OR job_type=2");
对于用户Peter
$result = mysqli_query($con,"SELECT * FROM jobs_data WHERE job_type=2 OR job_type=4 OR job_type=5");
非常感谢任何帮助。
答案 0 :(得分:1)
您的数据结构不理想 - 您的jobs_userac
每user<->job
个链接应该有一行。
但你可以使用你拥有的东西:
SELECT * FROM `jobs_data` WHERE FIND_IN_SET(`job_type`, "2,4,5")
答案 1 :(得分:1)
我不确定jobs_userac中的用户列是否存储userId或用户名
这里假设用户正在存储用户名,如果没有,那么请用用户ID替换用户名。
select * from jobs_data where IN(select jobsassigned
from jobs_userac
where user = 'Perter');
我希望这会对你有所帮助。
答案 2 :(得分:1)
此外,还在$ jobsassigned中为每个用户分配连接存储的作业 现在您可以执行以下查询:
$queryString = 'select * from jobs_data where id IN ('.$jobsassigned.')';
顺便说一下......最好添加一个额外的表来存储用户和作业之间的关系
作业
1 - Offset - Blablablabla - Blablablabla - Chris
2 - Plotter - Blablablabla - Blablablabla - Nick
3 - Design - Blablablabla - Blablablabla - John
用户
1 - Chris
2 - Peter
3 - Maria
user_job
1 - 1
1 - 2
2 - 2
2 - 4
2 - 5
3 - 4
答案 3 :(得分:1)
正如其他人所说,您当前的架构是次优的,一般来说不是利用关系数据库的最佳方式,但是您可以在查询中使用当前结构,但有点笨拙:
"SELECT * FROM JOBS_DATE WHERE id = '2' or id like '2,%' or id like '%,2,%' or id like '%,2'"
你需要所有的喜欢,因为你需要复制&#34; 2,5,7&#34;,&#34; 1,2,3&#34;和&#34; 1,2&#34;加上普通&#34; 2&#34;
的平等答案 4 :(得分:1)
首先,您必须将作业类型分配给链接用户:
$result = mysqli_query($con,"SELECT * FROM jobs_useracc where id=".$user);
$row = mysql_fetch_array($result);
$job_types=$row['jobassigned'];
$result = mysqli_query($con,"SELECT * FROM jobs_data where id IN (".$job_types.")");
答案 5 :(得分:0)
如果每个作业仅与一个用户关联,则应该针对作业存储该用户的ID。因此,您的表格应为id, user
和id, job_type, description, comments, client_name, user_id
。然后你可以通过SELECT * FROM jobs_data WHERE user_id = 1
获得Chris的工作。这是一种常规模式,您可以在一个表中有许多条目与另一个条目相关联。
答案 6 :(得分:0)
您指的是job_type
而不是id
。
你应该遵循:
$result = mysqli_query($con,"SELECT * FROM jobs_data WHERE id=2 OR id=4 OR id=5");
其他人也一样,即在id
处使用job_type
。