abler98
@abler98
Software Engineer

MySQL — Как правильно сформулировать запрос?

Есть таблица диалогов - dialogs: id | user_one | user_two
И есть таблица пользователей - users: id | name
В таблице диалогов содержатся записи вида 1 | 3 | 2
1 - уникальный номер записи
3 - id пользователя
2 - id пользователя
Мне нужно сделать выборку из таблицы users по users.id, значение нужно брать из dialogs.user_one или dialogs.user_two, в зависимости от того, как у меня ID (пусть это будет 2), то есть, если у меня ID = 2, нужно получить запись из таблицы users с ID = 3, а если у меня ID = 3, то users ID = 2. Надеюсь я понятно объяснил.

P.S. Мне кажется, что выполнять условие на PHP не есть хорошо:
if ($id == 2) {
    // select * from users where id = 3
} else {
    // select * from users where id = 2
}
  • Вопрос задан
  • 2394 просмотра
Решения вопроса 1
@akdes
такс, щас попробую правильно понять (не очень понятное) описание:
Есть таблицы: dialogs & users
dialogs: id | user_one | user_two

users: id | ...

Я так понимаю, запрос тебе необходим для аля Чата? Когда приходит сообщение, что бы тебе выдавало имя собеседника, а ему твоё?

почти ПХП:
$myID = 2;

// необходимо получить юзера, который не ты, из первой колонки или из второй
$result = mysql_query("SELECT * FROM dialogs WHERE user_one <> '$myID' OR user_two <> '$myID'");
if (!$result) {
    die('Сворачиваемся посоны: ' . mysql_error());
}


Понимать? =))

UPDATE:
теперь прикручиваем таблицу users:

$myID = 2; 

$result = mysql_query("SELECT * FROM users WHERE users.id = ((SELECT user_one FROM dialogs WHERE user_two = '$myID')OR (SELECT user_two FROM dialogs WHERE user_one = '$myID'))");
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Не очень понятно если честно.
Но по любому вам надо посмотреть или в сторону JOIN, или в сторону IF
Ответ написан
Комментировать
Если я Вас правильно понял:
нужно получить всех пользователей, у которых есть диалог с данным пользователем

SELECT u.* 
FROM users u 
WHERE 
(
    u.id IN (SELECT user_one FROM dialogs WHERE user_two=ID_ПОЛЬЗОВАТЕЛЯ) 
    OR 
    u.id IN (SELECT user_two FROM dialogs WHERE user_one=ID_ПОЛЬЗОВАТЕЛЯ) 
)
Ответ написан
Комментировать
@andreyvlru
менеджер-программист
Не уверен что это то что надо, но может поможет

select u1.name, u2.name,d.id
from dialogs d
left join users u1 on (d.uid1 = u1.uid)
left join users u2 on (d.uid2 = u2.uid)

Вы получаете это из БД, а потом уже в php смотрите кого вам поставить в отправителя, кого в получателя
в зависимости от того кто смотрит user1 или user2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы