MySQL查询有什么问题吗?

MySQL查询有什么问题吗?,mysql,drupal,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 (SELE

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

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

你在
地点
活动
之间有交叉连接。 您应该在子句中包含
,以避免这种交叉连接:

SELECT 
  a.aid, a.name, 
  a.picture, a.data, 
  a.time, p.name as place_name 
FROM 
  activities a  
    inner join
  places p
    on ...

我猜活动表有“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));