Страница Php/MySql 'Расширенного поиска'

Вы были близки, вам нужна ссылка из outerquery, чтобы она коррелировала subquery:

SELECT p.Date, p.visitorID
FROM payment p
WHERE p.Amount = (SELECT MAX(p1.Amount) FROM payment p1 WHERE p1.Date = p.Date);
8
задан Lance Roberts 22 May 2011 в 18:22
поделиться

5 ответов

Я предложил бы использование MySQL FullText Search с помощью этого с булевой Полнотекстовой функциональностью Поисков, необходимо смочь получить желаемый результат.

Править:

Требуемый пример на основе Ваших требуемых условий ("Его всего одно поле и они могут выбрать любую из этих 4 опций (т.е. 1 слова, точных слов, по крайней мере 1 слова, без термина)".)

Я предполагаю, что Вы используете php на основе своего первого сообщения

<?php
$choice = $_POST['choice'];
$query = $_POST['query'];

if ($choice == "oneWord") {
    //Not 100% sure what you mean by one word but this is the simplest form
    //This assumes $query = a single word
    $result = mysql_query("SELECT * FROM table WHERE MATCH (field) AGAINST ('{$query}' IN BOOLEAN MODE)");
} elseif ($choice == "exactWords") {
    $result = mysql_query("SELECT * FROM table WHERE MATCH (field) AGAINST ('\"{$query}\"' IN BOOLEAN MODE)");
} elseif ($choice == "atLeastOneWord") {
    //The default with no operators if given multiple words will return rows that contains at least one of the words
    $result = mysql_query("SELECT * FROM table WHERE MATCH (field) AGAINST ('{$query}' IN BOOLEAN MODE)");
} elseif ($choice == "withoutTheTerm") {
    $result = mysql_query("SELECT * FROM table WHERE MATCH (field) AGAINST ('-{$query}' IN BOOLEAN MODE)");
}
?>

надежда это помогает для использования в полной мере операторов в булевых соответствиях видеть булевы Полнотекстовые Поиски

13
ответ дан 5 December 2019 в 09:26
поделиться

Вы могли использовать

С по крайней мере одним из слов

SELECT * FROM myTable WHERE field LIKE '%$keyword%' 
or field LIKE '%$keyword2%' 
or field LIKE '%$keyword3%';

Без слова

SELECT * FROM myTable WHERE field NOT LIKE '%$keyword%';
2
ответ дан 5 December 2019 в 09:26
поделиться

Поиск является известно трудным преуспеть.

Необходимо Рассмотреть использование сторонней поисковой системы с помощью чего-то как Lucene или Sphider.

1
ответ дан 5 December 2019 в 09:26
поделиться

Я не уверен, что Вы могли легко сделать те параметры поиска наивным способом как другие два.

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

Когда объект добавляется к базе данных, он разделен на отдельные слова. В этой точке "общие" слова (a, и т.д....) удалены (вероятно, на основе common_words таблицы). Остающиеся слова добавляются к таблице слов, если они уже не присутствуют. Существует затем ссылка, сделанная между записью слова и записью объекта.

При поиске это - затем случай получения идентификаторов слова от таблицы слова и соответствующего поиска идентификаторов объекта в присоединяющейся таблице.

2
ответ дан 5 December 2019 в 09:26
поделиться

Жираф и Re0sless pooseted 2 хорошие ответы.

примечания: "ВЫБЕРИТЕ *, "сосет... только выбор столбцы, в которых Вы нуждаетесь. Re0sless помещает "ИЛИ" между ключевыми словами. - необходимо устранить общие слова ("" ", я", "и".. и т.д.) - mysql имеет 8 КБ, которые я живо ограничиваю на размере запроса, таким образом, для действительно длинных ВЫБОРОВ Вы должны, спал он в отдельные запросы. - пытаются устранить дублирующиеся ключевые слова (если я ищу, "Вы знаете о симпатии его" ВЫБОР, должен в основном только искать "Вас" однажды и elimnate общие слова как "он"),

Также попытайтесь использовать "КАК" и "СООТВЕТСТВИЕ КАК" (см. mysql страницу справочника), это могло сделать чудеса для "нечетких" поисков

0
ответ дан 5 December 2019 в 09:26
поделиться
Другие вопросы по тегам:

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