Групповой конкат лимит 1 - PullRequest
1 голос
/ 06 февраля 2012

Здесь мой групповой запрос

GROUP_CONCAT(DISTINCT IF(catalog_product_entity_varchar.attribute_id = '134',catalog_product_entity_varchar.value,NULL)) AS 'Subtitle'

Таблица содержит несколько строк с 134 в качестве идентификатора атрибута.На самом деле все, что я хочу сделать, это вытащить первый catalog_product_entity_varchar.value WHERE catalog_product_entity_int.attribute_id = 134

Полный SQL выглядит так:чтобы прояснить ситуацию.

Я собираю данные для продуктов.Чтобы упростить задачу, постарайтесь игнорировать большую часть запроса.Мы сосредоточимся только на «sku» и «subtitle».

Первая таблица catalog_product_entity.Мы снимаем SKU для каждого продукта.Существует также уникальный «entity_id».

Мы используем «entity_id», когда мы хотим извлечь все связанные детали для этого продукта из другой таблицы с именем catalog_product_entity_varchar.

Атрибут id относится ккакую конкретную информацию вы хотите.134 это субтитры и 63 это имя.Существуют и другие «атрибуты», каждый из которых имеет идентификатор.

Я использовал оператор IF, чтобы позволить мне назначить 134 для «субтитров» и 63 для «имен».Таблица выглядит примерно так:

entity_id   attribute_id   store_id   value
1                134         0        green, large
1                134         1        green, large
1                134         2        green, large
1                63          0        dakine day hiker bag
1                63          1        dakine day hiker bag
1                63          2        dakine day hiker bag

Обратите внимание, что один продукт, кажется, хранит один и тот же субтитр 3 раза.Это связано с тем, что используемая мной платформа электронной коммерции (Magento) позволяет хранить разные субтитры для каждого магазина, в котором вы работаете (одна установка Magento позволяет нескольким доменам совместно использовать одну и ту же базу данных продуктов, но иметь отдельные субтитры / описания и т. Д.)

Я использовал Group_Concat для получения данных, а затем DISTINCT, чтобы убедиться, что я получаю только один субтитр.Однако проблема, с которой я сталкиваюсь, заключается в том, что большую часть времени мои субтитры и имена абсолютно одинаковы во всех магазинах (так работает Distinct), но когда разные субтитры различаются, они получат более одного субтитра.

Toчестно говоря, я не очень хорош в MYSQL и чувствую, что могу как-то вообще пропустить group_concat, возможно, используя вложенные операторы SQL.Имейте в виду, что мы не всегда знаем, какие идентификаторы магазина будет использовать продукт.

Мне все равно, какие субтитры я беру, просто хочу один, первый, минимальный, максимальный,Безотносительно.

1 Ответ

1 голос
/ 06 февраля 2012

Вы говорите:

Таблица содержит несколько строк с 146 в качестве идентификатора атрибута.На самом деле все, что я хочу сделать, это вытащить первый каталогнесколько значений, поэтому вы должны определить, что вы подразумеваете под «первым»;это может быть MIN, MAX, LIMIT 1 или какой-то другой критерий.

SELECT MIN(Value) AS Value
  FROM Catalog_Product_Entity_Int
 WHERE Attribute_ID = 146;

SELECT MAX(Value) AS Value
  FROM Catalog_Product_Entity_Int
 WHERE Attribute_ID = 146;

SELECT Value
  FROM Catalog_Product_Entity_Int
 WHERE Attribute_ID = 146
 LIMIT 1;

Для того, что вы говорите, вы хотите, я не вижу причин присоединяться к остальным трем таблицам или использовать GROUP_CONCAT.

Это заставляет меня подозревать, что вы не сказали нам, что вы действительно хотите, потому что показанный запрос является чрезмерным излишним для заявленного требования.

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