Php 在MySQL中中断一个特殊字符
我需要检查数据库中的Php 在MySQL中中断一个特殊字符,php,mysql,pipe,Php,Mysql,Pipe,我需要检查数据库中的管道|。如果我被发现,我需要以不同的方式玩 下面是我的db表的外观//请检查第11行中的|字符 如果我运行一个GROUPBYSQL命令,我的结果将是 这是正确的 但我的要求是在任何单元格中打破|,并给出相应的计数。预期结果如下: 这可以单独使用MySQL命令完成吗?或者我还需要使用一些php脚本吗 任何代码片段都会很有帮助。您可以使用php并按照下面的方式进行操作 $query = mysql_query("SELECT fruit FROM meva"); $cnt
管道|
。如果我被发现,我需要以不同的方式玩
下面是我的db表的外观//请检查第11行中的|字符
如果我运行一个GROUPBYSQL命令,我的结果将是
这是正确的
但我的要求是在任何单元格中打破|
,并给出相应的计数。预期结果如下:
这可以单独使用MySQL命令完成吗?或者我还需要使用一些php脚本吗
任何代码片段都会很有帮助。您可以使用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);
注意:此代码未经测试,请尝试并进行相应编辑您可以使用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
如果一行中可以有多个管道,那么您的案例陈述将更加复杂我认为您应该修复数据。您可以在一行中运行这两条语句,直到所有数据都已修复:
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
如果一行中可以有多个管道,那么案例语句将更加复杂实际上最好的解决方案是更改数据结构。不建议使用此当前结构。每个“单元格”只能包含一个值。如果需要为特定ID存储多个FUIRT,请使用
id fruit
11 Apple
11 Mango
这可能需要对代码/表进行一些调整,但这将防止将来需要更多的黑客攻击。实际上,最好的解决方案是更改数据结构。不建议使用此当前结构。每个“单元格”只能包含一个值。如果需要为特定ID存储多个FUIRT,请使用
id fruit
11 Apple
11 Mango
这可能需要对代码/表进行一些调整,但这将防止将来需要更多的黑客攻击。希望此脚本可以帮助您
$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 />";
}
$frt=array();
$stmt=$mysqli->prepare(“从'meva`'中选择'fruits')或$mysqli->error;
$stmt->execute();
$stmt->bind_结果($fruits);
而($stmt->fetch()){
$frt[]=美元水果;
}
//var_dump($frt)//检查所有水果是否排列整齐
$res=array();
$tot=计数($frt);
对于($i=0;$i希望此脚本可以帮助您
$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 />";
}
$frt=array();
$stmt=$mysqli->prepare(“从'meva`'中选择'fruits')或$mysqli->error;
$stmt->execute();
$stmt->bind_结果($fruits);
而($stmt->fetch()){
$frt[]=美元水果;
}
//var_dump($frt);//检查数组中的所有水果
$res=array();
$tot=计数($frt);
对于($i=0;$ire,请认为您的数据结构在一个不同的列中存储“Mango”。标准化是问题的关键。重新考虑您的数据结构,将“Mango”存储在一个不同的列中。标准化是问题的关键。