SQL тот же столбец мульти фильтра - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь сделать запрос к нескольким таблицам, однако, чтобы упростить его, я сделаю его специфичным для одной таблицы.

table view

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

Чтобы было проще понять значения в таблице выше, я хотел бы, чтобы все строки в таблице были всеми строками, в которых«text_value» для «attribute_id» 1 равно 02067, а текстовое значение для «attribute_id» 2 - HEERA BROWN BASMATI RICE. Я хотел бы, чтобы оба эти условия соответствовали одному продукту. "Product_id" делает один продукт уникальным

Пример

table example

из этого набора результатов я хотел бы получить все строки, где строки с attribute_id 25имеют целочисленное значение 11, а строки со значением attribute_id 24 равны 6 (в настоящее время все делают, но в будущем они не будут) оба условия должны совпадать для одного product_id для строк этого product_id, которые будут возвращены.

Если вынужно больше разъяснений, пожалуйста, спросите спасибо.

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Учитывая редактирование исходного вопроса и дальнейшие комментарии, я думаю, что знаю, о чем спрашивает вопрос, но он еще не подтвержден. Похоже, что OP запрашивает записи, в которых один и тот же «product_id» указан как удовлетворяющий двум наборам связанных критериев, и только если он должен быть возвращен.

Это можно сделать, присоединив таблицу ксам, а затем устанавливая критерии для каждой стороны объединения.

В этом примере, снова предполагая, что имя таблицы 'MyTable':

SELECT mt1.* FROM `MyTable` mt1
  LEFT JOIN `MyTable` mt2
  ON( (`mt`.`product_id`=`mt2`.`product_id`)
      AND (`mt1`.`id`<>`mt2`.`id`) )
WHERE (`mt1`.`attribute_id`=25)
  AND (`mt1`.`integer_value`=11)
  AND (`mt2`.`attribute_id`=24)
  AND (`mt2`.`integer_value`=6)

Есть и другие способысделать это - например, используя IN (SELECT ...) запросы:

SELECT * FROM `MyTable` mt0
  WHERE (`product_id` IN
    (SELECT `product_id` FROM `MyTable` `mt1`
      WHERE (`mt1`.`attribute_id`=25) AND (`mt1`.`integer_value`=11) ) )
  AND  (`product_id` IN
    (SELECT `product_id` FROM `MyTable` `mt2`
      WHERE (`mt2`.`attribute_id`=24) AND (`mt2`.`integer_value`=6) ) )
0 голосов
/ 10 октября 2019

Это довольно простое объединение - я думаю, что вам было бы полезно прочитать о SQL и о том, как создавать объединения, поскольку это даст вам больше идей.

В вашем примере, если ваша таблица называется MyTable, тогдавы бы использовали:

SELECT * FROM `MyTable` WHERE `attribute_id` = 1 AND `text_value`='02067'
UNION
SELECT * FROM `MyTable` WHERE `attribute_id` = 2 AND `text_value`='HEERA BROWN BASMATI RICE'

Это даст вам все строки, где у вас есть комбинация атрибутов, которые вы запросили. Вам не нужно было бы использовать запрос UNION, но это позволяет вам выбирать данные из разных таблиц, которые, как вам кажется, и требуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...