MySQL, где положить в этом утверждении? - PullRequest
0 голосов
/ 16 февраля 2011

Это немного выше моих навыков, и мне очень помогли хорошие люди из SO, чтобы продвинуться так далеко.Теперь мне нужно вставить MATCH () ... ПРОТИВ (), но я не знаю, куда его вставить?

У меня есть запрос (и это короткая версия):

SELECT
  SQL_CALC_FOUND_ROWS i.idItems RowCount,
  i.* Items,
  # Create a JSON formatted field
  CONCAT('{',GROUP_CONCAT('"',Attributes.key, '":"', CONVERT(Attributes.value,CHAR),'"'),'}') as Attributes,
  IF (te.Key IS NULL,tp.Key,te.Key) as Type,
  tc.Value Color,
  l.* Location,
  c.Name,
  c.Mobile,
  c.Mail
FROM
  (SELECT ItemID, ats.Key, ats.Value FROM attributeStrings as ats
   UNION ALL
   SELECT ItemID, ati.Key, ati.Value FROM attributeIntegers as ati
  ) Attributes
JOIN Items i ON
  i.idItems = Attributes.ItemID
  AND CheckIn >= DATE_SUB('2011-02-16 00:00:00',INTERVAL 90 DAY)
  AND CheckIn <= DATE_ADD('2011-02-16 23:59:59',INTERVAL 90 DAY)
  AND Checkout IS NULL
LEFT JOIN Customers c ON c.idCustomers = i.CustomerID
LEFT JOIN attributeintegers atli ON atli.itemid = i.idItems AND atli.key = 'Location'
LEFT JOIN locations l ON l.id = atli.value
LEFT JOIN attributestrings atts ON atts.itemid = i.idItems AND atts.key = 'Type' LEFT
JOIN Lists tp ON tp.value = atts.value
LEFT JOIN attributestrings attes ON attes.itemid = i.idItems AND attes.key = 'Tech' LEFT
JOIN Lists te ON te.value = attes.value
LEFT JOIN attributeintegers atci ON atci.itemid = i.idItems AND atci.key = 'Color' LEFT
JOIN Strings tc ON tc.StringID = atci.value
GROUP BY Attributes.ItemID
ORDER BY CheckIn DESC

Теперь мне нужно где-то здесь вставить это утверждение

MATCH(attributestrings.Value) AGAINST("Nokia" IN BOOLEAN MODE)

Как вы можете видеть, есть таблица с именем attributetestrings , которая имеет 3 столбца: ItemID , * Key * и Значение .Мне нужно найти в столбце Значение слова в AGAINST () и показать только результаты, соответствующие этому и другим критериям, таким как Дата и Оформление заказа выше.

Я пытался добавить оператор после AND Checkout IS NULL следующим образом:

AND Checkout IS NULL
AND MATCH(Attributes.Value) AGAINST("Nokia" IN BOOLEAN MODE)

Мне пришлось использовать Attributes.Value вместо attributetestrings , потому что это нене нашел стол.Это привело только к тому, что в столбце CONCATENATED Attributes содержалось только значение «Nokia», даже если там было больше CONCATENATE.

Я надеюсь, что кто-то готов принять этот вызов ...

/ Tank you.

[EDIT]

Я попытался вставить WHERE перед GROUP, как предложил Тим Фульц, но я получаю сообщение об ошибке Unknown column ' attributetestrings.Значение 'в' Где оговорка '

LEFT JOIN attributeintegers atci ON atci.itemid = i.idItems AND atci.key = 'Color' LEFT JOIN Strings tc ON tc.StringID = atci.value
WHERE MATCH(attributestrings.Value) AGAINST("Nokia Sony" IN BOOLEAN MODE)
GROUP BY Attributes.ItemID

Ответы [ 3 ]

0 голосов
/ 17 февраля 2011

Я думаю, что нашел решение ...

Я добавил еще:

LEFT JOIN attributestrings fts ON fts.itemid = i.idItems AND MATCH(fts.Value) AGAINST("Nokia Sony" IN BOOLEAN MODE)

Непосредственно перед GROUP BY... и включением fts.Value ftsv в основной оператор выбора. Теперь я могу вставить HAVING ftsv IS NOT NULL между GROUP BY... и ORDER BY...

Это дало мне желаемый результат, но теперь запрос начинает работать немного медленнее ...

0 голосов
/ 10 апреля 2012

В вашем запросе возникает проблема, когда вы присваиваете имена таблиц с использованием as в каждом месте, где вы запрашиваете назначенное вами имя.Как вы дали атрибутные строки как ats, теперь используйте ats везде, и это будет работать.

0 голосов
/ 16 февраля 2011

Обычно это указывается в предложении Where:

WHERE MATCH(attributestrings.Value) AGAINST("Nokia" IN BOOLEAN MODE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...