具有多个id的MySQL行作为条件

时间:2014-08-17 23:07:27

标签: php mysql

我有一张表用于作业。这些分配有多个要求(用户需要拥有的东西才能被允许进行分配)。我将这些要求作为需求表中的id。

我希望用户获得符合要求的作业。所以我有一组用户在php中使用的ID,我需要查询只询问该用户具有或更少的ID的分配。

我想创建一个包含所有需求的json数组,并将其放在assignments表的一列中。然后还创建一个具有用户要求的json数组,然后在LIKE查询中使用它。

但我发现这不起作用。

例如,我有[“6”,“9”,“11”]作为要求,并且用户拥有6 7 9 11 12。

这些要求本身适合用户拥有的要求(使用%“6”%等),而不是相反。

所以我的问题是,如何在我的分配表中搜索,以某种方式提供用户拥有的ID,并且只获得满足用户所拥有的ID的行,或者更少。

我还可以为需求创建一个表,而不是列,每行需要一行,但我不知道如何在一个查询中搜索它。

2 个答案:

答案 0 :(得分:1)

您应该创建一些关联表。您可以阅读有关关联表on this website的更多信息。

在您的情况下,您最终会得到以下表格:

  • assignmentsassignment_id
  • requirementsrequirement_id
  • assignment_requirementsassignment_idrequirement_id
  • usersuser_id
  • user_met_requirementsuser_idrequirement_id

assignment_requirementsuser_met_requirements是关联表 之后,您可以使用联接查找满足要求的所有分配:

SELECT a.id
FROM `assignments` a
JOIN `assignment_requirements` ar
    ON (a.`assignment_id` = ar.`assignment_id`)
JOIN `user_met_requirements` umr
    ON (umr.`requirement_id` = ar.`requirement_id`)
WHERE umr.user_id = "$YOUR_USER_ID"
GROUP BY a.id

这将为您提供可用作业的列表。 这是非常未经测试的,所以正确的答案可能略有不同,但这是要走的路。

答案 1 :(得分:0)

好的,所以我现在有办法使用..

我在WHERE中有一个子查询;查询assignment_requirements并离开加入user_met_requirements,我将COUNT(assignment_id)和COUNT(user_id)放入HAVING中,以防万一{ {1}}为NULL,表示它没有要求,并且不会计入user_id,因此它会忽略该行。

这确实意味着我的开销很小,我认为,因为每项任务都是次要的。

如果有人有更好的想法,我会暂时搁置这个问题,否则我会坚持这个。