我有一张 table ,其办公室涵盖一系列邮政编码,其中邮政编码最低和邮政编码最高。另一个表格,其中邮政编码链接到城市名称,
用户搜索一个城市,数据库返回一个数组,其中每个邮政编码都链接到该城市。然后我希望我的代码使用这个邮政编码数组在 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
最佳答案
通过在同一查询中执行所有操作来解决该问题,
添加了邮政编码与最小值和最大值的内部联接,然后过滤用户输入城市字符串的邮政编码城市。
最终结果
$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']."");
关于php - mysql where 表中两个字段之间的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26469260/