Я сведу его к соответствующим частям, и в псевдокоде:
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.
Единственное хорошее решение (мудрое кармой), я могу думать, включил бы использование ПОЛНОТЕКСТОВОГО ИНДЕКСА. Это позволило бы Вам использовать запросы как это:
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');
Какой тип данных Ваши столбцы? Если бы они - VARCHAR или подобный, Вы просто сделали бы
select
*
from
tbl
where
description like '%(s1)%'
or colour like '%(s1)%'
(Это адаптировано от @Pax, кому я верю, неправильно понял вопрос - я беру его, чтобы означать, что он должен соответствовать каждый раз, когда критерий поиска появляется в 'описании' или 'цвете'.)
Идеально, я думаю, что у Вас было бы два отдельных критерия поиска, один для описания (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 немного ржав, таким образом, я не знаю, как Вы сделали бы, это точно, но понятие является звуковым.