2013-08-10 5 views
1

Как настроить этот запрос? У меня есть награды в таблице. Например, трофеем может быть награда_ид 1 в таблице вознаграждений. Лента может быть award_id 2 в таблице вознаграждений. У меня тогда есть другая таблица, award_user, где у нее есть award_id и userid пользователя. Итак, если я хочу дать пользователю award_id 1, а их идентификатор пользователя - 25, он будет в таблице award_user как award_id 1 и userid 25 (что означает, что у них есть эта награда). Я хочу выбрать все награды, которые пользователь использовал на основе своего идентификатора пользователя.Как настроить запрос MySQL?

Вот что все-таки. Награды указаны в таблице вознаграждений, но фактическая информация о наградах представлена ​​в таблице вознаграждений. Поэтому, я думаю, мне придется выбирать из двух разных мест.

Вот что я до сих пор ..

$ запрос = mysql_query ("SELECT * FROM награду WHERE award_id = (SELECT award_id FROM WHERE award_user идентификатор пользователя = $ USERID)");

Не уверен, что это сработает или нет.

В основном, он должен выбрать награды из таблицы вознаграждений с наградами, которые имеет идентификатор пользователя. $ userid - допустимая переменная, это их идентификатор пользователя.

Спасибо!

+0

Вам просто (вероятно) нужно простое соединение здесь. Покажите обе структуры таблиц, и кто-то может показать вам, как присоединиться на основе отношения разделяемых разделов таблицы. – James

ответ

1

Ваш способ выражения запроса должен работать с одной незначительной настройкой. Вы должны изменить = к in, потому что может быть больше, чем один известно

SELECT * 
from award a 
WHERE a.award_id in (SELECT au.award_id FROM award_user au WHERE au.userid = $userid) 

Более типично, это будет выражаться в качестве соединения:

select a.* 
from award a join 
    award_user au 
    on a.award_id = au.award_id 
where au.userid = $userid; 

join форма часто является более эффективным, Что ж.

+0

Я пытаюсь использовать первый запрос, используя. Вот как я его модифицировал. SELECT * from award, award_user WHERE award_id в (SELECT award_id FROM award_user WHERE userid = $ userid) Однако, протестировав его, заменив $ userid номером 1 в phpMyAdmin, я получаю # 1052 - столбец 'award_id' в IN/ALL/ANY Подзапрос неоднозначен – llw

+0

В вашей статье есть 'from award, award_user'. Это порождает кросс-продукт и вызывает проблему. Неопределенность - это часть 'award_id' в выражении. –

+0

SELECT * from award WHERE award_id in (SELECT award_id FROM award_user WHERE userid = $ userid) Это работает. Тем не менее, мне нужно выбрать столбец «issue_id» из таблицы «award_user», поэтому я пытался выбрать SELECT * из обеих этих таблиц. – llw

0

Что вам нужно, это join:

SELECT awards.* FROM awards 
    JOIN award_user USING (award_id) 
WHERE userid = :userid 

Кстати, обучение how joins work это одна вещь, которую вы действительно нужно сделать для того, чтобы правильно использовать SQL. Это то, что все реляционные базы данных. Если вы используете базу данных SQL, но не используете объединения, это немного похоже на, скажем, новый компьютер, но только для чтения и записи текста в «Блокноте».

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