MySQL查询任何问题?

时间:2012-03-15 18:38:02

标签: mysql drupal

我有一个数据库,在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));

据我所知,将列出登录用户创建并因此拥有的活动,但是,如果用户创建了多个活动,则登录用户可以看到其他人的活动并编辑它们。我认为问题可能出在查询的任何部分,但我无法弄清楚出了什么问题。有什么想法吗?

2 个答案:

答案 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)

您在placesactivities之间有交叉联接。 您应该包含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 ...