2012-03-15 8 views
0

私はDrupalのインストールの中にいくつかのテーブルをホストするデータベースを持っています。これらの表の1つは活動のためのものであり、もう1つは場所です。私は、ユーザーが場所を作成し、これらの場所で実行できるアクティビティを追加し、アクティビティを作成すると、そのアクティビティをオーナーであれば編集することができます。だから、私はこのクエリを持っている:私は理解してログインしているユーザーのアクティビティをリストし、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

:そこ

$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

0

placesactivitiesのクロス結合があります。 あなたがこのクロスを避けるためにon clauseを含める必要があります参加:私は、アクティビティテーブルがある "PID" 欄(場所ID)を推測している

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