我产生这样的结果的查询:如何限制访问基于用户联系人表我查询的行IDS
的数据按日期降序排序,然后通过时间DESC,而且共同的'markers_name'元素被分块在一起。 (他们只在每个日期分组在一起)。
要做到这一点,我得到MAX(time)
值的列表中conditions
的(markers_id, date)
每一个组合,然后再加入该列表的行集我从本查询得到,并使用MAX(time)
值排序:
SELECT
m.name AS markers_name,
c.time AS conditions_time,
c.date AS conditions_date,
s.name AS station_name
FROM markers m
INNER JOIN conditions c ON c.markers_id = m.id
INNER JOIN station s ON c.station_id = s.id
INNER JOIN (
SELECT
markers_id,
date,
MAX(time) AS time
FROM conditions
GROUP BY
markers_id,
date
) mx ON c.markers_id = mx.markers_id AND c.date = mx.date
ORDER BY
c.date DESC,
mx.time DESC,
m.name DESC,
c.time DESC
现在我需要限制用户访问某些行。
条件表具有“专用”列。如果'private'设置为1,则只有一些人可以看到查询行。可以看到的人包括创建条件报告的人和该人的联系人。条件表具有'user_id',其中包含创建条件报告的人员的ID。联系人从包含'user_id'和'friend_id'两个字段的'contacts'表中获取。我有请求信息的人的user_id。
要重申的另一种方式,我需要做的是这样的:
- 执行上面的查询,也请检查是否c.private被设置为1。
- 如果c.private设置为1,则使用c.user_id从联系人表中获取该用户的'friend_id'。
- 如果请求信息的用户的user_id与c.user_id匹配或c.user_id的任何朋友返回查询行。如果没有,请不要返回该行或返回表明行是私有的东西(例如,我可以在数据库中使用名称“Private”的标记名称,例如:
如果有人有任何想法, 。很想听到他们的声音我这昨天一整天挣扎谢谢
非常感谢您的回复。我只是试过这个,但是我在where子句中出现错误。我会在明天早上尝试调试它,并让你知道我找到了什么。再次感谢。 – user418775
我的错误是由于在$ userid周围没有使用单引号造成的。我尝试了你的第一个答案,它效果很好!感谢您提供有关如何做到这一点的详细信息。 – user418775