2016-07-13 4 views
1

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

| ID | user1_id | user1_status | user2_id | user2_status | 
| 1 | 1  | 0   | 2  | 0   | 
| 2 | 4  | 1   | 5  | 1   | 
| 3 | 4  | 1   | 6  | 0   | 
| 4 | 1  | 0   | 4  | 1   | 

Вот проблема у меня есть, значение я ищу может быть либо «user1_id»/«user2_id», а затем мне нужно вернуть «user_status» ТОЛЬКО для другого пользователя. п. Я сделал эту таблицу очень простой. В моей версии есть намного больше столбцов, я хочу, чтобы мой сервер не возвращался.

Предположим, что пользователь user_id равен 4, поэтому мне нужно выбрать всю строку с user1_id/user2_id равным 4 и вернуть другому пользователю user_status. В таблице первый случай значения, равного 4, находится в user1_id, мне нужна эта строка для возврата user2_id и user2_status.

Вот то, что я до сих пор, но он не работает:

mysqli($connect, " 
SELECT `id` 
    CASE 
     WHEN `user1_id`='4' THEN `user2_id` AND `user2_status` 
     WHEN `user2_id`='4' THEN `user1_id` AND `user1_status` 
    ELSE NULL 
    END 
     from 'relationship' 
     where `user1_id`='4' OR `user2_id`='4' 
") 

Как я пишу этот оператор запроса?

+0

Почему у вас есть PHP-тег? –

+0

Поскольку я спрашиваю об этом в php, я должен снять его? – toastext

+0

Этот вопрос, я думаю, касается только SQL, поэтому вы можете удалить PHP-тег –

ответ

1

Если вы ссылаетесь на CASE syntax, вы увидите, что он определен для возврата одного столбца, а не кортежа. Кроме того, в вашем запросе вы пытаетесь получить либо (user2_id, user_status), либо NULL. Здесь вы получаете несоответствие в количестве столбцов, которые также недопустимы.

Если вы действительно хотите использовать СЛУЧАЙ вы могли бы сделать:

SELECT `id` 
    CASE 
     WHEN `user1_id`='4' THEN `user2_id`, 
     ELSE NULL 
    END 
    CASE 
     WHEN `user2_id`='4' THEN `user1_id` 
     ELSE NULL 
    END 
    CASE 
     WHEN `user1_id`='4' THEN `user1_status` 
     ELSE NULL 
    END 
    CASE 
     WHEN `user2_id`='4' THEN `user2_status` 
     ELSE NULL 
    END 

    FROM 'relationship' 
     where `user1_id`='4' OR `user2_id`='4' 

да, неуклюжим и запутанной. Очень простой, если вы используете UNION.

SELECT id, user2_id AS uid, user2_status as ustatus FROM relationship WHERE user1_id = 4 
UNION 
SELECT id, user1_id AS uid, user1_status as ustatus FROM relationship WHERE user2_id = 4 
+0

, который вы сказали «если», вы ссылаетесь на синтаксис CASE. Есть ли лучший способ предложить вам? Поскольку синтаксис CASE был единственным способом, я думал, что mysql может выполнять инструкции if. BTW Большое вам спасибо, я попробую. :) – toastext

+0

обновил свой ответ. Это союз. – e4c5

+0

Хе-хе, ты читал мой разум. Собираясь делать некоторые исследования в синтаксисе «union». – toastext

Смежные вопросы