2012-03-15 4 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

0

У вас есть перекрестное соединение между places и activities. Вы должны включить 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

Смежные вопросы