#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
, но выбираете onposts.added_by <> '$myuserid'
? Я подозреваю, что соединение и выбор должны быть в одном столбце, например, joinagents
onposts.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, в которой я храню идентификатор клиента и агента. Так что, нам нужно присоединиться к этому сейчас?