MySQL查询有什么问题吗?
我有一个数据库,在Drupal安装中托管了几个表。其中一张是活动表,另一张是地点表。我让用户创建地点,然后添加可以在这些地点完成的活动,一旦您创建了活动,如果您是该活动的所有者,则可以对其进行编辑。因此,我有一个疑问: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
$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));