MySQL在数据库数组字段中查找数组值

我有一个数组,它可以包含不同的值,例如:数组( [0] => General Pharmacy [1] => Geriatric Pharmacy )

WordPress DB 在 meta_value 中包含以下数组:a:4:{i:0;s:20:"Allgemeine Pharmazie";i:1;s:22:"Geriatrische Pharmazie";i:2;s:16: "Fachascient*in";s:8:"other_16";s:8:"Tierarzt";}

我想获取数据库中具有数组值的用户的 user_id 。

我尝试了这个问题的解决方案PHP/MySql search array with array

$zuqual = $this->userInput["Zuquali"];

$imploded = (implode(",", $zuqual));

print_r($zuqual); //output Array ( [0] => Allgemeine Pharmazie [1] => Geriatrische Pharmazie )


if(!empty($zuqual)){

   $result = $this->wpdb->get_col($this->wpdb->prepare("SELECT user_id FROM wp_usermeta WHERE meta_key='addition_qualification' AND meta_value IN ('".$imploded."')"));

}

var_dump($result);

但我只得到空结果,而且我认为这不是正确的查询,因为如果在元值中找到数组元素(Allgemeine Pharmazie 和 Geriatrische Pharmazie),我想要 user_id,对吧?


在此先感谢您的帮助 :)


慕无忌1623718
浏览 147回答 1
1回答

慕哥9229398

由于您的数据存储为 PHP 序列化数组,因此您需要首先提取通用数据并循环遍历它,或者需要执行 LIKE 查询。WordPress 有一个专门的函数来正确转义 LIKE 参数,称为wpdb::esc_like. 运行完之后,SQL 应该看起来像这样:SELECT    user_idFROM    wp_usermetaWHERE    meta_key='addition_qualification'    AND    (        meta_value  LIKE %s        OR        meta_value  LIKE %s     )一旦你调用该 SQL 的准备,它将被转换为:SELECT    user_idFROM    wp_usermetaWHERE    meta_key='addition_qualification'    AND    (        meta_value  LIKE '%Allgemeine Pharmazie%'        OR        meta_value  LIKE '%Geriatrische Pharmazie%'    )这不是最理想的解决方案,但它可能是在 WordPress 上下文中处理此类数据的最佳解决方案。这是创建上述内容的代码:$zuqual = $this->userInput["Zuquali"];if (!empty($zuqual)) {    $likeTemplate = ' meta_value  LIKE %s ';        // This will hold the above string repeated once for each item in our search array    $likes = [];        // This will hold sanitized values to perform LIKE searches, each surrounded by percent signs    $params = [];    foreach ($zuqual as $item) {        $likes[] = $likeTemplate;        $params[] = '%' . $this->wpdb->esc_like($item) . '%';    }        // If we have more than one search term, this will join with the OR, otherwise it will be left as-is    $likeSql = implode(' OR ', $likes);        // Create our query, remembering to surround the nested part with parentheses    $sql = "SELECT user_id FROM wp_usermeta WHERE meta_key='addition_qualification' AND (" . $likeSql . ")";        // Pass our escaped params in    $prepared = $this->wpdb->prepare($sql, $params);    $result = $this->wpdb->get_col($prepared);}
打开App,查看更多内容
随时随地看视频慕课网APP