2012-03-15 29 views
0

我有一個數據庫,它承載了Drupal安裝中的幾個表。其中一個表用於活動,另一個表是地點。我有用戶創建地點,然後添加可以在這些地方完成的活動,一旦創建活動,您可以編輯它,如果您是它的所有者。所以,我有這個疑問:MySQL查詢任何問題?

$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)); 

也就是說,按照我的理解將列出活動的登錄用戶已創建,因此擁有,但是,如果有用戶創建一個以上活動已登錄的用戶可以看到其他人的活動並編輯它們。我認爲問題可能在查詢的任何部分,但我無法弄清楚什麼是錯誤的。有任何想法嗎?

回答

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)); 
+0

這就是訣竅!謝謝! – KerrM 2012-03-15 19:21:12

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 ... 
+0

您好,感謝您的回覆。我改變了,但問題仍然存在。 – KerrM 2012-03-15 18:58:35