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

#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.