2014-10-20 3 views
0

У меня есть одна таблица с офисами, которые охватывают ряд почтовых индексов с наименьшим индексом zipcode и наивысшим zipcode. Другая таблица с zipcodes, связанная с именем города,mysql, где массив между двумя полями в таблице

Пользователь ищет город, и база данных возвращает массив с каждым почтовым индексом, связанным с этим городом. Затем я хочу, чтобы мой код использовал этот массив почтовых индексов для поиска в таблице офисов и выяснения, соответствует ли какое-либо значение между значениями max и min.

позволяет сказать, что мы искали город, вызвавшую эти Почтовые индексы

$search_string = 25002,25003,25004,25005,25006,25007,25008,25009,25013,25014, 25015,25018,25019,25022,25023,25024,25025,25053,25054,25100,25101,25106,25107,25108,25109,25110,25111,25112,25113,25114,25181,25183,25184 

Это была моя попытка решения, думал он работал, но, видимо, только тренировки для первого значения.

$query = $this->db->prepare("SELECT contacts.id FROM contacts INNER JOIN contacts_postcodes_links ON contacts_postcodes_links.contact = contacts.id WHERE contacts.id != 0 ".$category1." ".$category2." AND :search_string BETWEEN contacts_postcodes_links.minValue AND contacts_postcodes_links.maxValue ORDER BY id DESC ".$limit.""); 

Так что мне нужна помощь, возможно ли это сделать? Если нет, как бы решить эту проблему?

my_array BETWEEN contacts_postcodes_links.minValue AND contacts_postcodes_links.maxValue 
+0

что тип 'postcode' магазина в базе данных? if is 'int' вы можете найти минимальное и максимальное значение в своей строке поиска и использовать' BETWEEN' – smoqadam

+0

Это int, но с одним значением это не проблема, теперь мне нужно проверить промежуточные значения на сервере, то есть The проблема – tobros91

ответ

0

решаемые его, делая все в том же запросе,

Добавлено внутреннее соединение на почтовых индексов к значениям мин и макс, а затем фильтруют город Почтовые индексы для строки ввода города пользователем.

Окончательный результат

$query = $this->db->prepare("SELECT DISTINCT(contacts.id) FROM contacts 
          INNER JOIN contacts_postcodes_links ON contacts_postcodes_links.contact = contacts.id 
          INNER JOIN postcodes ON postcodes.postcode >= contacts_postcodes_links.minValue AND postcodes.postcode <= contacts_postcodes_links.maxValue 
          WHERE contacts.id != 0 AND contacts.category_1 = :category_1 AND contacts.category_2 = :category_2 
          AND postcodes.city LIKE :search_string 
          ORDER BY id DESC LIMIT ".$options['limit']." OFFSET ".$options['start'].""); 
Смежные вопросы