У меня есть таблица данных, и мне нужно, чтобы результаты поиска отображались по имени столбца
У меня есть эта таблица
id address city zipcode state country
1 12, street arizona 1234 abcd new island
2 abcd,stree abcd 7895 abcd us
3 new av mumbai 6875 abcd uk
4 abcd, street test ci 5687 abcd new island
5 6741, street df df 12345 abcd uae
Что мне нужно, если кто-то ищет, скажем "abcd"«Я хочу, чтобы результаты отображались следующим образом:
5 адрес, который соответствует« abcd »
и 1 для каждого из города, почтового индекса, штата и страны
, поэтому в основном яхотите в одном запросе ограничить адрес, чтобы получить 5 адресов, ограничить 1 город, если доступен, ограничить 1 почтовый индекс, если доступен, ограничить 1 штат, если доступен, ограничить 1 страну, если доступен.
также ключевое слово должно искать каждый столбецне только по адресу.я добился этого, используя несколько запросов
$query = $this->db->query("SELECT city FROM ".$this->db->dbprefix('prison')." WHERE city like'%".$keyword."%' LIMIT 1");
$query2 = $this->db->query("SELECT zipcode FROM ".$this->db->dbprefix('prison')." WHERE zipcode like'%".$keyword."%' LIMIT 1");
$query3 = $this->db->query("SELECT state FROM ".$this->db->dbprefix('prison')." WHERE state like'%".$keyword."%' LIMIT 1");
$query4 = $this->db->query("SELECT address FROM ".$this->db->dbprefix('prison')." WHERE address like'%".$keyword."%' LIMIT 10");
$query5 = $this->db->query("SELECT country FROM ".$this->db->dbprefix('prison')." WHERE country like'%".$keyword."%' LIMIT 1");
$result_array = [];
$result_array['cities'] = $query->row();
$result_array['zipcode'] = $query2->row();
$result_array['state'] = $query3->row();
$result_array['address'] = $query4->result();
$result_array['country'] = $query5->row();
return $result_array;
Есть ли в любом случае я могу добиться этого в одном запросе?также возможно ли это решение, я показываю результат через ajax при keyup, так что я обеспокоен тем, что выполнение нескольких запросов повлияет на время загрузки результата.
Я также попробовал одно решение с помощью оператора UNION, оно дает мне результаты, которые мне нужны, ноне дает идентификатор, чтобы увидеть, является ли это город, штат или почтовый индекс
$query = $this->db->query("SELECT prison_city FROM ".$this->db->dbprefix('prison')." WHERE prison_city like'%".$keyword."%' LIMIT 1 UNION SELECT prison_zipcode FROM ".$this->db->dbprefix('prison')." WHERE prison_zipcode like'%".$keyword."%' LIMIT 1 UNION SELECT prison_state FROM ".$this->db->dbprefix('prison')." WHERE prison_state like'%".$keyword."%' LIMIT 1 UNION SELECT prison_country FROM ".$this->db->dbprefix('prison')." WHERE prison_country like'%".$keyword."%' LIMIT 1 UNION SELECT prison_address FROM ".$this->db->dbprefix('prison')." WHERE prison_address like'%".$keyword."%' LIMIT 10");
return $query->result();
, он выводит эти данные
Array (
[0] => stdClass Object ( [prison_city] => Susanville )
[1] => stdClass Object ( [prison_city] => California )
[2] => stdClass Object ( [prison_city] => 24900 CA-202 )
[3] => stdClass Object ( [prison_city] => New York, America )
[4] => stdClass Object ( [prison_city] => 1 Kings Way, Avenal, CA 93204, USA )
[5] => stdClass Object ( [prison_city] => 14901 Central Ave )
[6] => stdClass Object ( [prison_city] => 19025 Wiley's Well Road )
[7] => stdClass Object ( [prison_city] => 23500 Kasson Rd )
[8] => stdClass Object ( [prison_city] => 475-750 Rice Canyon Rd )
[9] => stdClass Object ( [prison_city] => 19005 Wiley's Well Road )
)
у него есть две проблемы, во-первых, он не даетидентификатор и второй предел, который я установил только для адреса, который он применяет ко всему результату.