亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL在數據庫數組字段中查找數組值

MySQL在數據庫數組字段中查找數組值

PHP
慕無忌1623718 2023-09-15 21:07:51
我有一個數組,它可以包含不同的值,例如:數組( [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,對吧?在此先感謝您的幫助 :)
查看完整描述

1 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

由于您的數據存儲為 PHP 序列化數組,因此您需要首先提取通用數據并循環遍歷它,或者需要執行 LIKE 查詢。

WordPress 有一個專門的函數來正確轉義 LIKE 參數,稱為wpdb::esc_like.?運行完之后,SQL 應該看起來像這樣:

SELECT

? ? user_id

FROM

? ? wp_usermeta

WHERE

? ? meta_key='addition_qualification'

? ? AND

? ? (

? ? ? ? meta_value? LIKE %s

? ? ? ? OR

? ? ? ? meta_value? LIKE %s?

? ? )

一旦你調用該 SQL 的準備,它將被轉換為:


SELECT

? ? user_id

FROM

? ? wp_usermeta

WHERE

? ? 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);

}


查看完整回答
反對 回復 2023-09-15
  • 1 回答
  • 0 關注
  • 197 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號