Добавление 2 таблиц массива вместе - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь получить статус всех пользователей с моего сайта. Вот мой стол enter image description here

Если я добавлю другого пользователя, мое имя пользователя будет добавлено в user1 Если другой пользователь добавляет меня туда, имя пользователя добавляется в user1, а мое - в user2

Так что мне нужно попробовать и получить все идентификаторы от user1 и user2 были приняты 1

что мне так нравится

$id = $_SESSION['user_id'] ;
$yes = '1';
     $query = $db2->prepare("SELECT * FROM friend_requests WHERE (user1='".$id."' OR user2='".$id."') AND accepted = '".$yes."'");
    $query->execute();
 foreach ($query as $row) {
        print $row['user1'] . "\t";
        print $row['user2'] . "\t";

    }

Но теперь у меня есть $ row ['user2'] и $ row ['user1'], есть ли способ соединить их в один? Так что я могу просто сделать состояние выбора цикла pdo, где id = that?

Я пытаюсь получить все статусы: id = $ row ['user1'] или $ row ['user2'], но я не хочу использовать или в моем выборе pdo.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете использовать UNION:

<?php

$id = $_SESSION['user_id'] ;
$yes = '1';
$query = $db2->prepare("SELECT id,user2 AS `user` FROM `friend_requests` WHERE user1=:user1 AND accepted={$yes} UNION SELECT id,user1 AS `user` FROM `friend_requests` WHERE user2=:user2 AND accepted={$yes}");
$query->bindParam(':user1', $id, PDO::PARAM_INT);
$query->bindParam(':user2', $id, PDO::PARAM_INT);

$query->execute();
foreach ($query as $row) {
    print $row['user'] . "\t";
}

Пример: sqlfiddle

0 голосов
/ 07 мая 2018

Вы можете редактировать свой SQL следующим образом:

"SELECT id, (CASE WHEN user1 = $id THEN user2 ELSE user1 END) as user, time FROM friend_requests WHERE (user1 = $id OR user2 = $id) AND accepted = 1"

Это вернет только принятых друзей для вашего пользователя с идентификатором $ ID.

Подтверждение концепции здесь: http://www.sqlfiddle.com/#!9/e0b337/2

РЕДАКТИРОВАТЬ : Как уже указывалось, вы должны связать параметры для защиты от внедрения SQL, но это выходит за рамки вашего вопроса.

РЕДАКТИРОВАТЬ 2 : По второму вопросу ниже вы можете сделать два цикла или, если таблица мала по сравнению с доступной памятью, вы можете выполнить fetchAll () следующим образом.

$id = $_SESSION['user_id'] ;
$query = $db2->prepare("SELECT (CASE WHEN user1 = :userid THEN user2 ELSE user1 END) as user FROM friend_requests WHERE (user1 = :userid OR user2 = :userid) AND accepted = 1");
$query->bindParam(':userid', $id, PDO::PARAM_INT);
$query->execute();
$friends = $query->fetchAll(PDO::FETCH_ASSOC);
$friends[] = array('user'=>$id);
foreach ($friends as $k=>$friend) {
    echo $friend . "\t";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...