Как увидеть записи в базе данных для моих клиентов под другими агентами, но не мной?

#php #sorting #equals

#php #сортировка #равно

Вопрос:

У меня была давняя проблема с этим кодом. Я несколько раз публиковал этот вопрос в SOF, но так и не смог четко сформулировать проблему, но теперь я могу.

Я хочу иметь возможность видеть сообщения других агентов для моих клиентов. Итак, в этом запросе я не должен видеть сообщения, добавленные мной для моих клиентов, но сообщения для моих клиентов, добавленные другими агентами. Ниже то, что я пытался. Хорошо то, что код делает то, что мне нужно, но затем он показывает мне сообщения, которые тоже не для моих клиентов. Итак, я не уверен, где мне нужно внести изменения?

Код:

 $type1 = "Added by Other Agents"
$myuserid = My id.  So i am using <> to not show posts added by me for my clients. 

$sql = "SELECT posts.posts_id, accounts.full_name,
agents.agent_name, posts.person_id, posts.why_posts, 
posts.just_date, posts.type, posts.date_time_added FROM 
posts LEFT JOIN accounts ON posts.person_id = accounts.person_id 
LEFT JOIN agents on posts.agent_whois = agents.agent_id WHERE 
(posts.type = '$type1') and  
(posts.added_by <> '$myuserid')"; 
$result=mysql_query($sql);

$query = mysql_query($sql) or die ("Error: ".mysql_error());

if ($result == "")
{
echo "";
}
echo "";


$rows = mysql_num_rows($result);

if($rows == 0)
{
print("");

}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{

$postsid = $row['posts_id'];
$agentwho = $row['person_id'];
$agentname = $row['agent_name'];
$reason = $row['why_posts'];
$datetimeadded = $row['just_date'];
$name = $row['full_name'];
$type = $row['type'];


print("");
}

}
  

Комментарии:

1. Неясно, в каком поле в какой таблице хранится право собственности клиента. Не могли бы вы уточнить, какое поле связывает вас с вашими клиентами?

2. таблица accounts — это таблица clients. извините за путаницу

3. Почему вы подключаетесь к агентам posts.agent_whois = agents.agent_id , но выбираете on posts.added_by <> '$myuserid' ? Я подозреваю, что соединение и выбор должны быть в одном столбце, например, join agents on posts.added_by = agents.agent_id

4. ну, эта таблица извлекает сообщения этих агентов для моего клиента. причина, по которой я делаю <>, заключается в том, чтобы не показывать сообщения мной..

Ответ №1:

Есть ли ошибка в SQL? У вас есть:

 $sql = "SELECT posts.posts_id, accounts.full_name,
agents.agent_name, posts.person_id, posts.why_posts, 
posts.just_date, posts.type, posts.date_time_added FROM 
posts LEFT JOIN accounts ON posts.person_id = accounts.person_id 
LEFT JOIN agents on posts.agent_whois = agents.agent_id WHERE 
(posts_type = '$type1') and  
(posts.added_by <> '$myuserid')"; 
  

Мне кажется, что это, вероятно, должно быть так:

 (posts.type = '$type1') 
  

Я ожидаю, что это выдало бы ошибку, если бы она была неправильной, поэтому я не уверен (например, «нет такого столбца»).

Комментарии:

1. вы правы, я, должно быть, ошибся, пытаясь сделать несколько вещей. тем не менее, проблема все еще существует!

Ответ №2:

Если в таблице accounts указано, какой агент связан с клиентом, вам нужно добавить дополнительное условие, чтобы указать учетные записи, которые связаны только с вами. Поскольку мне до сих пор неясно, что это за поле, допустим, оно называется accounts.agent_owner

В этой части вашего SQL:

 FROM posts
LEFT JOIN accounts ON (posts.person_id = accounts.person_id)
LEFT JOIN agents ON (posts.agent_whois = agents.agent_id)
WHERE (posts_type = '$type1') AND (posts.added_by <> '$myuserid')
  

Добавить:

     AND accounts.agent_owner = '$myuserid'
  

Комментарии:

1. привет, спасибо. но это не сработало. он ничего не возвращает, если я добавлю это.

2. какое фактическое поле связывает вас с клиентом?

3. учетные записи. agent_id — это поле, которое будет связывать его.

4. итак, предполагая, что вы изменили posts_type на posts.type и agent_owner на agent_id , возвращаете ли вы нулевые результаты или сообщение об ошибке?

5. я также создал новую таблицу с именем relations, в которой я храню идентификатор клиента и агента. Так что, нам нужно присоединиться к этому сейчас?