PHP/MySql 用数组搜索数组

Posted

技术标签:

【中文标题】PHP/MySql 用数组搜索数组【英文标题】:PHP/MySql search array with array 【发布时间】:2015-05-27 16:31:23 【问题描述】:

我正在建立一个 WordPress 网站。

通过 mysql 查询,我从我的数据库中加载所有具有特定品牌的公司:

$results = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = 'brand'")`

brand 是一个数组,所以我在数组中搜索一个特定的值:

$brand = $_GET['brand'];
$brandNeedle = $brand;

if(in_array($brandNeedle, $brand[0]))

现在,我的客户要求列出与所有选定公司有关联的所有用户。

所以我需要创建一个新查询。幸运的是,用户都在他们的列中添加了一个字段,告诉我他们在哪里工作。

所以我想:如果我创建一个数组来保存从公司列表中查询到的所有公司名称。

通过这个数组,我可以选择列中包含公司名称的所有用户

所以我认为查询应该是这样的:

SELECT * FROM $wpdb->usermeta WHERE meta_key='company' AND meta_value ='THE ARRAY'

但这并不明显,因为它无法使用数组中的数组进行搜索。

我似乎无法弄清楚。有什么想法吗?

-- 编辑-- 好的,所以我执行了 implode 函数,但我做错了:

$brand_array = array();
for($i=0; $i <count($results); $i++)
    $result = $results[$i]; 
    if ($i % 2 == 0)
        $oddeven = 'even';
    else
        $oddeven = 'odd';
    
    $post_id = $result->post_id;
    $company_name = get_post_meta($post_id, 'company_name', true); 
    $brand_array[] = $company_name;

    print_r($brand_array);
    $imploded = implode(',',$brand_array);

    $query = "SELECT * FROM $wpdb->usermeta WHERE meta_key='company' AND meta_value IN $imploded";
    $persons = $wpdb->get_results($query);

这为我提供了我需要的结果(新数组中的两家公司) 并给我以下错误:

WordPress database error: [You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'brand1,brand2' at line 1]
SELECT * FROM wp_usermeta WHERE meta_key='company' AND meta_value IN
brand1,brand2

【问题讨论】:

尝试组合内爆数组值,然后在查询中使用 IN 子句 【参考方案1】:

您是否考虑过在 MySQL 上使用“IN”子句? https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in

你可能会有类似的东西:

$query = "SELECT * FROM ".$wpdb->usermeta." WHERE meta_key='company' AND meta_value IN ('".implode("', ', $brand)."')";

edit:忘记在“in”内容周围添加括号)

【讨论】:

不,我没有,但我喜欢。所以我仍然需要创建一个包含我所有品牌名称的数组吗?感谢您朝着正确的方向推动!如果它有效(或无效)我会回来 是的,您使用“内爆”功能加入您的阵列。只记得在你的内爆中添加引号,否则查询将搜索整个字符串作为一个。 你好像忘记了引号:SELECT * FROM wp_usermeta WHERE meta_key='company' AND meta_value IN 'brand1','brand2' 记得在join中也要加上引号,否则它只会搜索一个大字符串。 试试这样:` $imploded = implode("','",$brand_array); $query = "SELECT * FROM $wpdb->usermeta WHERE meta_key='company' AND meta_value IN '".$imploded."'"; ` 什么加入???大声笑我在这里,所以请和我裸露。我在implode() 中添加引号,就像这样implode("','",$brand_array);,我在哪里join 这个?【参考方案2】:

在 mysql 中搜索 IN 子句

SELECT * FROM $wpdb->usermeta WHERE meta_key='company' AND meta_value IN implode(',',$brand_array)

【讨论】:

以上是关于PHP/MySql 用数组搜索数组的主要内容,如果未能解决你的问题,请参考以下文章

php+mysql,把三个数字按从小到大排序变成一个三位数

PHP MySQL查询仅输出一个二元素数组

PHP/mysql:使用数组查询 MySQL 并在数组中获取结果

PHP - 在创建数组时(mysql_fetch_array)程序在数组中创建数组

PHP/MYSQL 数组存储和检索问题

mysql 以数组的形式插入更新表