我正在尝试获取多个行的总和,每个sum都有一个匹配的列字符串值,并且所有值都有匹配的4个字符前缀,但它不起作用,我可以使用一些帮助。此外,CASE对数据库的查询是否会更高或更低? 从这开始:
$sql =
"SELECT col1
FROM table
WHERE substr(col1,1,5)='$string'";
$query = mysqli_query($con, $sql);
$row = mysqli_fetch_array($query,MYSQLI_ASSOC);
$results = $row['col1'];
$sum1 = count(array_keys($results,'string1'));
$sum2 = count(array_keys($results,'string2'));
是否可以从WHERE子句中的同一列获取结果?
实际上,col1的行值如aaaa_string1,aaaa_string1,aaaa_string2,aaaa_string2,bbbb_string8 ...所以我希望获得所有col1结果,其中aaaa在数组中,然后随后过滤每个string1中存在多少个和string2。
答案 0 :(得分:2)
使用SUBSTR(col1, LENGTH('$string')+1)
获取前缀后面的列部分,并按此分组。
使用LIKE 'prefix%'
匹配以前缀开头的列。
SELECT SUBSTR(col1, LENGTH('$string')+1) AS suffix, COUNT(*) as count
FROM table
WHERE col1 LIKE '$string%'
GROUP BY suffix
然后你可以使用一个循环来创建一个包含所有计数的关联数组:
$counts = array();
while ($row = mysqli_fetch_assoc($query) {
$counts[$row['suffix']] = $row['count'];
}
var_dump($counts);
答案 1 :(得分:0)
看着你的代码似乎是你想要获得子串' string1'或者' string2'在col1
"select col1, count(*) as col_count
from table
WHERE substr(col1,1,5)= '$string'
and col1 in ('string1','string2')
group by col1"
您应该在col_string和col_count
中检索结果表示后缀(假设char 6结束)
"select bstr(col1, 6, 100), count(*) as col_count
from table
WHERE substr(col1,1,5)= '$string'
and substr(col1, 6, 100) in ('string1','string2')
group by bstr(col1, 6, 100)"