我有一张办公室的桌子,涵盖一系列邮政编码最低,邮编最高的邮政编码。另一个表格,其中包含链接到城市名称的zipcodes,
用户搜索城市,数据库返回一个数组,其中每个邮政编码都链接到该城市。然后我希望我的代码使用这个邮政编码数组在office表中搜索,看看是否有任何值适合最大值和最小值。
我们可以说我们搜索了一个返回这些邮政编码的城镇
$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 :(得分: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']."");