2015-04-13 7 views
0
$sql = "SELECT user2 FROM subscriptions WHERE user1 = '$username'"; 

Этот код работает отлично, но я хотел бы сделать это ORDER it В столбце из таблицы моих пользователей - столбец user_id. Теперь я не могу это сделать ...SQL Order By Column From another Table

$sql = "SELECT user2 FROM subscriptions WHERE user1 = '$username' ORDER BY user_id"; 

Поскольку нет столбца с именем user_id в моей таблице подписки, только в моей таблице пользователей.

+2

какие индексы используют соединение. –

+2

Зачем отмечать как MySQL, так и MS SQL Server? (Не помещайте те продукты, которые не задействованы ...) – jarlh

+0

Почему у вас нет дополнительной колонки в этом случае? (если только для целей безопасности) –

ответ

-2

и должны использовать order by user_id desc

1

Вы должны JOIN таблицы.

SELECT subscriptions.user2 
FROM subscriptions 
LEFT JOIN users ON subscriptions.user2 = users.user_id 
WHERE subscriptions.user1 = '$username' ORDER BY users.user_id 
+0

Работает только тогда, когда users.user_id уникален. – jarlh

0

Вы должны использовать JOIN syntax и после того, как вы можете заказать по user_id из users таблицы.

0

Вы можете выбрать user_id в вашем ORDER BY предложении:

SELECT user2 
FROM subscriptions 
WHERE user1 = '$username' 
ORDER BY (select user_id from users where users.username = subscriptions.user2); 

я предполагаю, что users.username уникален, поэтому у вас есть два природных уникальных ключей в таблице пользователей (user_id и имя пользователя). Вы решили использовать имя пользователя для ссылок в других таблицах. Это нормально.

Если, однако, имя пользователя.sername не уникально, то ваш дизайн базы данных не работает, и вы должны использовать user_id как ссылку в других таблицах вместо имени пользователя, конечно.

0

Используйте регулярное соединение (не ВЛЕВОЕ ПРИСОЕДИНЕНИЕ), если у вас есть взаимно-однозначное отношение данных.

SELECT a.user2 FROM subscriptions a, user b 
WHERE a.user2 = b.username 
AND a.usera.user1 = '$username' ORDER BY b.user_id 

Это трудно дать рабочее решение без просмотра схемы таблицы. Но из запроса кажется, что у вас плохой дизайн dab, если вы используете «$ username» для поиска в подписках вместо таблицы пользователей.

С хорошей базой данных создать свой запрос должен быть таким:

SELECT a.fiel1, a.field2, a.user_id, b.field1, b.field2, b.user_id 
    FROM subscriptions a, user b 
    WHERE a.user_id = b.user_id 
    AND b.username = '$username' ORDER BY b.user_id 
  • присоединяется по user_id
  • Хранение имя пользователя один раз в таблице пользователей
  • Используйте user_id в других таблицах
+0

спасибо, и я только назвал переменную, чтобы читателям было легче узнать, что я делал, вместо случайных букв –