逗号将值分隔为选择查询

时间:2014-09-22 08:49:30

标签: php mysql sql

我是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");

非常感谢任何帮助。

7 个答案:

答案 0 :(得分:1)

您的数据结构不理想 - 您的jobs_useracuser<->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, userid, 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