选择相同列值以字符串开头的行,2个问题

时间:2016-11-08 17:54:50

标签: php mysql mysqli substring case

我正在尝试获取多个行的总和,每个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。

2 个答案:

答案 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)"