2013-12-23 5 views
0

Вот моя ситуация. Я разрабатываю небольшую службу поддержки, где пользователь будет выполнять поиск своей проблемы. НАПРИМЕР. I cannot connect to the internet.Запросить базу данных с помощью uknown amout параметров

У меня есть на моей базе данных таблицы по ключевым словам, такое интернет, связь, интернет-исследователь и т.д.

То, что я хочу сделать, это разделить эту фразу, I cannot connect to the internet в словах и есть массив:

[0]=> I 
[1]=> cannot 
[2]=> connect 
[3]=> to 
[4]=> the 
[5]=> internet 

А затем сделать запрос в базе данных, очень просто:

SELECT * FROM solutions T1 
    join solution_tags_intermediate T2 on T1.ID_SOLUTION = T2.ID_SOLUTION 
    join solution_tags T3 on T2.SOLUTION_TAGS_ID = T3.SOLUTION_TAGS_ID 
    WHERE T3. SOLUTION_TAGS_NAME = ?? 

Вот моя проблема, как я могу привести список записей назад от databas e, которые соответствуют моему поиску, когда я не знаю точное количество параметров до тех пор, пока запрос не будет выполнен?

Есть ли способ сделать это или более сложным?

Кстати, это разрабатывается на php и mysql.

+0

Предполагается, что T3.SOLUTION_TAGS_NAME является одним из элементов массива? Можете ли вы сделать WHERE T3. SOLUTION_TAGS_NAME IN ('. .implode ("', '", $ array).' ') '- Это уязвимо , но вы можете сделать счет и заменить его на '?', чтобы сделать его безопасным ... Но это то, что вы пытаетесь сделать? –

+1

Вам будет лучше использовать индекс FULLTEXT и удаляя «шумовые» слова, такие как 'To' и' the' перед выполнением поиска –

+0

Да, я пытаюсь выполнить поиск по любому из слов в этой строке. Можете ли вы сделать более подробный пример? – codeninja

ответ

0

Вы должны использовать функции explode() и fputcsv(), чтобы разбить поисковую фразу на массив и затем преобразовать ее в строку с разделителями-запятыми. Затем вы можете использовать предложение IN в своем запросе для выполнения поиска.

ГДЕ T3.SOLUTION_TAGS_NAME IN (»$ csv_variable.. ")";..

+0

Как работает функция fputcsv()? Не используйте это раньше. Согласно документации PHP, он создал файл CSV, зачем мне его создавать? – codeninja

+0

На самом деле это должно было быть imode вместо fputcsv, извините за это. Концепция остается прежней. – loganjmoore

0

Вы должны серьезно рассмотреть следующие @MarcB комментарию советы Это то, что полнотекстовые поиски были сделаны для

http://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html

+0

Я прочитал статью, но я немного смущен. Как бы изменился мой запрос, если бы я был полезен для поиска по поиску? – codeninja

Смежные вопросы