2015-09-27 3 views
2

Извините, если это название немного запутано ... Я испорчен ORM, и мои сырые навыки SQL действительно бедны, по-видимому.Выберите пользователя по имени пользователя, а затем выберите данные из другой таблицы, используя их UID

Я пишу приложение, которое ссылается на форум vBulletin. Пользователи аутентифицируются с помощью имени пользователя своего форума, и запрос для этого прост (выбор по имени пользователя из таблицы пользователей). Следующая половина его сложнее. Также есть таблица подписок, в которой есть временная метка, но основным ключом для них является идентификатор пользователя, а не имя пользователя.

Это то, что я работал так далеко:

SELECT 
    forum.user.userid, 
    forum.user.usergroupid, 
    forum.user.password, 
    forum.user.salt, 
    forum.user.pmunread, 
    forum.subscriptionlog.expirydate 
FROM 
    forum.user 
    JOIN forum.subscriptionlog 
WHERE 
    forum.user.username LIKE 'SomeUSER' 

К сожалению, это возвращает полноту subscriptionlog таблицы, которая имеет смысл, потому что нет ни одного поля имени пользователя в нем. Можно ли захватить строку подписного журнала, используя userid, который я получаю от forum.user.userid, или это нужно разделить на два запроса?

Спасибо!

+0

Урок № 1 в том, почему не использовать слепой 'join', если вы не знаете, вам это нужно. Это полностью сформулировано как «cross join» и _can_ быть полезным в соответствующих случаях, но обычно это не так. Просто выполните «внутреннее соединение», используя столбцы id из обеих таблиц. –

ответ

2

Проблема в том, что вы слепо соединяете эти две таблицы. Вам нужно указать, к какому столбцу они относятся.

Я думаю, что вы хотите что-то вроде:

SELECT * FROM user u 
    INNER JOIN subscriptionlog sl ON u.id = sl.userid 
WHERE u.username LIKE 'SomeUSER' 
1

выберите * от пользователя у РЕГИСТРИРУЙТЕСЬ подписки с ВКЛ u.id = s.id где u.username = 'someuser'

бит жирным шрифтом является то, что вы хотите добавить, он объединяет 2 таблицы в один, из которого вы возвращаете результаты.

+0

Получил это. Я не знал, что вы можете назначить такие переменные. Спасибо! –

+0

Эти имена называются псевдонимами. Полный синтаксис будет включать «как» между реальными и псевдонимами, которые я лично предпочитаю, но вы увидите, что оба метода плавают вокруг. Псевдонимы редко необходимы, но вы можете обнаружить, что они экономят вас при вводе в соответствующие ситуации. Переменные - это что-то другое, и они выглядят '@ likeThis'. –

+0

Полезно знать. Благодаря! –

1

попробовать этот

SELECT 
forum.user.userid, 
forum.user.usergroupid, 
forum.user.password, 
forum.user.salt, 
forum.user.pmunread, 
forum.subscriptionlog.expirydate 
FROM 
forum.user 
INNER JOIN forum.subscriptionlog 
ON forum.subscriptionlog.userid = forum.user.userid 
WHERE 
forum.user.username LIKE 'SomeUSER' 
+0

Вот и все. Спасибо! –

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