mysql многостолбцовый поиск

Я сведу его к соответствующим частям, и в псевдокоде:

do
{
   // do stuff that's irrelevant here
   ask user to type Y or N and store into "again" // that's the cin >> again line
}
while (again is Y or y)

Ключ в том, что цикл выполняется до тех пор, пока переменная «again» не будет равна Y или y.

И снова переменная устанавливается внутри цикла, основываясь на пользовательском вводе.

Возьмите эти две вещи вместе, и вы обнаружите, что цикл работает, пока пользователь не введет Y или y.

5
задан paxdiablo 10 February 2009 в 10:50
поделиться

4 ответа

Единственное хорошее решение (мудрое кармой), я могу думать, включил бы использование ПОЛНОТЕКСТОВОГО ИНДЕКСА. Это позволило бы Вам использовать запросы как это:

SELECT * FROM mytable
WHERE MATCH (description,color) AGAINST ('black dress');

К сожалению, Полнотекстовые индексы требуют типа таблицы MyISAM, если я вспоминаю правильно.

Править

Я сомневаюсь, что это - то, что Вы ищете, но позволяете мне добавить его ради обсуждения. Вы могли копировать свои данные во временную таблицу MyISAM и сделать Вас полнотекстовый поиск на этом:

CREATE TEMPORARY TABLE mytmptable ENGINE=MyIsam SELECT * FROM mytable;
ALTER TABLE mytmptable ADD FULLTEXT KEY (description,color); 
SELECT * FROM mytmptable WHERE MATCH (description,color) AGAINST ('black dress');
3
ответ дан 15 December 2019 в 01:12
поделиться

Какой тип данных Ваши столбцы? Если бы они - VARCHAR или подобный, Вы просто сделали бы

select 
  * 
from 
  tbl 
where 
  description like '%(s1)%' 
  or colour like '%(s1)%'

(Это адаптировано от @Pax, кому я верю, неправильно понял вопрос - я беру его, чтобы означать, что он должен соответствовать каждый раз, когда критерий поиска появляется в 'описании' или 'цвете'.)

0
ответ дан 15 December 2019 в 01:12
поделиться
where colour+description like '%s1%'
1
ответ дан 15 December 2019 в 01:12
поделиться

Идеально, я думаю, что у Вас было бы два отдельных критерия поиска, один для описания (s1) и один для цвета (s2).

Затем Ваш запрос становится:

select * from tbl where description like '%(s1)%' and colour like '%(s2)%'

Замена в значениях для s1 и s2, конечно.

Пробел s2 привел бы к %%, который должен соответствовать всему (я думаю).

Чтобы смочь искать на нескольких условиях в любом поле, Вам нужно что-то как

select * from tbl
    where description + colour like '%(s1)%'
      and description + colour like '%(s2)%'
      and description + colour like '%(s3)%'

Это должно будет быть создано на лету, на основе количества слов в Вашем шаблоне поиска (таким образом, "черное платье" будет иметь s1, и s2, черный, будет просто иметь s1). "Описание + цветной" бит является связанными полями; мой SQL немного ржав, таким образом, я не знаю, как Вы сделали бы, это точно, но понятие является звуковым.

0
ответ дан 15 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: