我有一个数据库,在Drupal安装中托管了几个表。其中一个表用于活动,另一个表用于活动。我让用户创建地点,然后添加可以在这些地方完成的活动,一旦您创建了活动,您可以编辑它,如果您是其所有者。所以,我有这个问题:
$activ = db_query("SELECT a.aid, a.name, a.picture, a.data, a.time, p.name as place_name FROM activities a, places p WHERE p.pid = ANY (SELECT pla.pid FROM places pla WHERE pla.uid = :uid) ORDER BY a.activity_date ASC", array(':uid' => $user->uid));
据我所知,将列出登录用户创建并因此拥有的活动,但是,如果用户创建了多个活动,则登录用户可以看到其他人的活动并编辑它们。我认为问题可能出在查询的任何部分,但我无法弄清楚出了什么问题。有什么想法吗?
答案 0 :(得分:1)
我猜测活动表有“pid”列(地方ID):
$activ = db_query(
"SELECT a.aid, a.name,
a.picture, a.data,
a.time, p.name as place_name
FROM activities a
LEFT JOIN places p USING(pid)
WHERE pla.uid = :uid
ORDER BY a.activity_date ASC",
array(':uid' => $user->uid));
答案 1 :(得分:0)
您在places
和activities
之间有交叉联接。
您应该包含on clause
以避免此交叉加入:
SELECT
a.aid, a.name,
a.picture, a.data,
a.time, p.name as place_name
FROM
activities a
inner join
places p
on ...