我有一张表用于作业。这些分配有多个要求(用户需要拥有的东西才能被允许进行分配)。我将这些要求作为需求表中的id。
我希望用户获得符合要求的作业。所以我有一组用户在php中使用的ID,我需要查询只询问该用户具有或更少的ID的分配。
我想创建一个包含所有需求的json数组,并将其放在assignments表的一列中。然后还创建一个具有用户要求的json数组,然后在LIKE查询中使用它。
但我发现这不起作用。
例如,我有[“6”,“9”,“11”]作为要求,并且用户拥有6 7 9 11 12。
这些要求本身适合用户拥有的要求(使用%“6”%等),而不是相反。
所以我的问题是,如何在我的分配表中搜索,以某种方式提供用户拥有的ID,并且只获得满足用户所拥有的ID的行,或者更少。
我还可以为需求创建一个表,而不是列,每行需要一行,但我不知道如何在一个查询中搜索它。
答案 0 :(得分:1)
您应该创建一些关联表。您可以阅读有关关联表on this website的更多信息。
在您的情况下,您最终会得到以下表格:
assignments
(assignment_id
)requirements
(requirement_id
)assignment_requirements
(assignment_id
,requirement_id
)users
(user_id
)user_met_requirements
(user_id
,requirement_id
) assignment_requirements
和user_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
,因此它会忽略该行。
这确实意味着我的开销很小,我认为,因为每项任务都是次要的。
如果有人有更好的想法,我会暂时搁置这个问题,否则我会坚持这个。