Ваш запрос:
select
friend_id,
candidate_id
from request
where candidate_id=:candidate_id or friend_id=:candidate_id
Так что это нормально, что вы вернете ВСЕ строки, где :candidate_id
в столбце friend_id
или candidate_id
:
4 20181010181207 20180928115958
5 20181008181142 20181010181207
6 20181010181207 20180925112428
Сейчасто, что вы хотите:
20180928115958 // this is candidate_id of row 4
20181008181142 // this is friend_id of row 5
20180925112428 // this is candidate_id of row 6
Если вы хотите, чтобы значение столбца "XXX_id" не было равно :candidate_id
, попробуйте следующее:
select
IF(friend_id = :candidate_id, '', friend_id) as friend_id,
IF(candidate_id = :candidate_id, '', candidate_id) as candidate_id
from request
where candidate_id=:candidate_id or friend_id=:candidate_id
Таким образом, вывернет пустое значение для столбца, который соответствует вашему :candidate_id
.
Теперь просто добавьте тест перед отображением, чтобы избежать пустой строки:
if (!empty($row_ac['friend_id'])
echo $row_ac['friend_id']."<br/><br/>";
if (!empty($row_ac['candidate_id'])
echo $row_ac['candidate_id']."<br/><br/>";
Вы также можете сделать это:
select
IF(friend_id = :candidate_id, candidate_id, friend_id) as result_id
from request
where candidate_id=:candidate_id or friend_id=:candidate_id
Таким образом, вы вернете только ОДИН результат: тот, который не равен :candidate_id
.
Тогда просто сделайте echo $row_ac['result_id']."<br/><br/>";
, чтобы получить то, что вы хотите