Я в настоящее время PHP функции (CodeIgniter), которая принимает строку запроса (от должности), и возвращает соответствующие строки MySQL, например:Как искать несколько столбцов с приоритетом в MySQL?
$term = $this->input->post("query");
$rows = $this->db->query("SELECT id, title as 'desc' , abbreviation , etc FROM shows WHERE abbreviation LIKE '%".$term."%' OR title LIKE '%".$term."%' OR etc LIKE '%".$term."%' LIMIT 10; ")->result_array();
это работает, но позволяет сказать, что мой стол, как это:
id title abbreviation
-- ---------------------- ------------
1 The Big Bang Theory TBBT
2 How I Met Your Mother HMYM
3 a show called tbbt hmym ASCTM
Теперь, когда пользователь ищет tbbt
, он сначала возвращает третью строку. Но я хочу, чтобы аббревиатура являлась «основным» параметром.
Так что если аббревиатура совпадает, верните ее сначала, а затем найдите столбец заголовка.
Я думаю, что я могу сделать это с PHP, например:
// pseudo-code :
$abbreviation_matches = result("bla bla WHERE abbreviation LIKE term AND NOT title like term");
$title_matches = result("bla bla WHERE NOT abbreviation LIKE term AND title LIKE term");
$result = append($abbreviation_matches , $title_matches);
Но я боюсь, что это не будет столь эффективным, так как она включает в себя 2 отдельных запросов SQL. Так есть ли более эффективный способ сделать это? Предпочтительно в одном запросе?
И настоящий случай состоит из 4 столбцов, но только один столбец имеет приоритет, поэтому другие не важны по порядку.
Спасибо за помощь!
вау. похоже большой. больше, чем я прошу, потому что я могу использовать этот рейтинг еще больше, например 1,2,3 и т. д. Но как насчет дублирующих строк? Является ли этот дубликат безопасным? – jeff
Используйте ключевое слово DISTINCT в SELECT подзапроса, если вы считаете, что значения аббревиатуры или названия столбца могут иметь дубликаты в таблице данных. Слово предостережения, здесь столбец rnk будет иметь значение 1 или 2 только в зависимости от того, в каком столбце совпадало совпадение. Но если вы хотите ранжировать 1,2,3 ... ваши результаты запроса, я бы предложил вам задайте отдельный вопрос. –
Да, конечно, я получил ранг. Но нет, моя таблица не имеет повторяющихся значений. И теперь я читаю ваш код более тщательно, и я думаю, что он будет работать нормально. Просто позвольте мне проверить его, а затем принять ваш ответ. Еще раз спасибо ! – jeff