#php #mysql
#php #mysql
Вопрос:
Хорошо, допустим, у меня есть таблица, состоящая из трех столбцов. Первый столбец — это уникальный идентификатор, второй — имена пользователей, а третий — элементы, которыми владеют пользователи.
Что я хотел бы сделать, так это выбрать значения из строки items, которыми обладают два разных имени пользователя. Как я могу это сделать? Итак, гипотетически допустим, я хочу посмотреть, какими элементами обладают Боб и рут.
Любая помощь была бы высоко оценена.
Есть ли способ опубликовать таблицы, чтобы привести пример того, о чем я говорю?
Комментарии:
1. Что вы имеете в виду, что третий столбец содержит элементы ? Это какой-то список с разделителями? Если это так, это будет сложно, если вы не нормализуете свои таблицы.
2. Является ли столбец items внешним ключом к списку элементов? Могут ли существовать две строки для одного и того же имени пользователя и элемента?
3. Эй, ребята, нет, один пользователь может владеть одним элементом один раз. Обе строки являются внешними ключами, соединяющими две таблицы.
Ответ №1:
На основе того, что я думаю о вашей структуре таблицы…
SELECT i.itemid,
i.description
FROM items i
JOIN useritemrelationship r
ON i.itemid = r.itemid
JOIN users u
ON u.userid = r.userid
WHERE u.name in ( 'Ruth', 'Bob' )
GROUP BY i.itemid
HAVING COUNT(DISTINCT r.userid) = 2
Комментарии:
1. Привет, Мартин, есть ли шанс, что ты мог бы немного объяснить это для меня? Что именно означают t1 и t2?
2. Нет, я не принимал это во внимание, поскольку это первый раз, когда я о них слышу! Должен ли я предположить что-то вроде
username (userid, name)
иitems (itemid, description)
иuseritemrelationship (userid,itemid)
3. Да, точно. Извините за мои плохие описательные способности :(, вы понятия не имеете, как сильно вы мне сейчас помогаете. В настоящее время я работаю над 4 дополнительными репутациями, которые мне нужны, чтобы повысить ваш рейтинг. Лол.
4. Вау, Мартин. Вы знаете свое дело. Тот же вопрос, хотя, что именно означают i и u? Это просто имена переменных, которые работают в SQL?
5. @Ferdia — Это просто псевдонимы таблиц для экономии ввода. Вы помещаете их после имен таблиц в
FROM
илиJOIN
, а затем используете короткие имена в других частях запроса.
Ответ №2:
Я мог бы предложить создать новую таблицу для элементов, содержащую по крайней мере три поля: ItemId (если имена элементов не уникальны), ItemName и OwnerId. Затем запрос из новой таблицы:
SELECT itemName FROM items WHERE ownerID='ruths id' OR ownerID='bobs ID'
Это также помогло бы реализовать нормализацию, которая обычно является чистым / организованным этикетом, которому следует следовать при создании базы данных.
Комментарии:
1. Итак, как я это настроил, у меня есть таблица, которая описывает элементы, включая name, и идентификатор элемента передается в таблицу, которую я описал выше, используя внешний ключ. Таблица, которую я ищу, предназначена для каждого экземпляра владения элементом в другой таблице. Итак, эта таблица существует для определения взаимосвязи между таблицей users и таблицей items.