MySQL запрос ЛЮБАЯ проблема? - PullRequest
0 голосов
/ 15 марта 2012

У меня есть база данных, в которой размещены несколько таблиц внутри установки 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));

Что, как я понимаю, будет перечислять действия, созданные зарегистрированным пользователем и, следовательно, им принадлежащие, однако, если существует несколько созданных пользователями действий, вошедший в систему пользователь может просматривать действия других людей и редактировать их. Я думаю, что проблема может быть в ЛЮБОЙ части запроса, но я не могу понять, что не так. Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Я предполагаю, что в таблице активности есть столбец "pid" (идентификатор места):

$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 голосов
/ 15 марта 2012

У вас есть перекрестное соединение между 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 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...