[英]Break a special character in MySQL
我有一個需要檢查pipe |
在數據庫中。 如果發現,我需要以不同的方式玩耍。
這是我的數據庫表的外觀//Please check the | character in row 11
//Please check the | character in row 11
如果我通過sql命令運行組,則myresult將是
哪個是對的。
但是我的要求是打破|
在任何單元格中並相應地計數。 預期結果為
可以單獨使用MySQL命令完成此操作,還是需要使用一些php腳本?
任何摘要都將有所幫助。
希望這個腳本可以幫助你
$frt =array();
$stmt = $mysqli->prepare("select `fruits` from `meva`") or $mysqli->error ;
$stmt->execute();
$stmt->bind_result($fruits);
while ($stmt->fetch()) {
$frt[]=$fruits;
}
// var_dump($frt); //check all the fruits is in array
$res = array();
$tot = count($frt);
for($i=0;$i<=$tot;$i++)
{
if(preg_match("/\|/", $frt[$i]))
{
$res[] =explode( '|', $frt[$i]);
}else
{
$res[] = $frt[$i];
}
}
// var_dump($res);
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($res));
foreach($it as $v) {
$ary[]=$v;
}
$all_fruits = array();
$tot_ary = count($ary);
for($io=0;$io<=$tot_ary;$io++)
{
if(isset($ary[$io])!='')
{
$all_fruits[] = trim($ary[$io]);
}else
{
continue;
}
}
// var_dump($all_fruits);
$newArray = array_count_values($all_fruits);
foreach ($newArray as $key => $value) {
echo "$key - <strong>$value</strong> <br />";
}
您可以使用php並按以下方式進行操作
$query = mysql_query("SELECT fruit FROM meva");
$cnt_array = array();
while($row = mysql_fetch_assoc($query)){
$fruits = $row["fruit"];
$fruit = explode("|", $fruits);
foreach($fruit as $fru){
if(array_key_exists($fru,$cnt_array)){
$cnt_array[$fru] = $cnt_array[$fru]+1;
}
else{
$cnt_array[$fru] = 1;
}
}
}
print_r($cnt_array);
注意:此代碼未經測試,請嘗試並進行相應的編輯
我認為您應該修復數據。 您可以連續運行以下兩個語句,直到修復所有數據:
INSERT INTO meva (fruits)
SELECT SUBSTR(fruits, LOCATE('|', fruits) - 1) FROM meva
WHERE LOCATE('|', fruits) > 0;
UPDATE meva
SET fruits = SUBSTR(fruits, LOCATE('|', fruits) + 1)
WHERE LOCATE('|', fruits) > 0;
這將修復表格。
但是,如果僅是按原樣從表中進行計數是您的面試問題(或學校作業),那么只有在知道給定行中最大管道數量的情況下,您才能這樣做。
因此,如果一行中的最大管道數為1,則您的select語句將為:
SELECT count(*),
CASE WHEN LOCATE('|', fruits) > 0 THEN SUBSTR(fruits, LOCATE('|', fruits) - 1) ELSE fruits END
FROM meva
GROUP BY CASE WHEN LOCATE('|', fruits) > 0 THEN SUBSTR(fruits, LOCATE('|', fruits) - 1) ELSE fruits END
如果您可以連續擁有多個管道,那么您的CASE語句將更加復雜
實際上,最好的解決方案是更改數據結構。 不建議使用此當前結構。 每個“單元格”只能包含一個值。 如果您需要為一個特定的ID存儲多個文件,請使用
id fruit
11 Apple
11 Mango
這可能需要對您的代碼/表進行一些調整,但是它將防止將來需要更多的黑客。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.