Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择相同列值以字符串开头的行,2个问题_Php_Mysql_Mysqli_Substring_Case - Fatal编程技术网

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

Php 选择相同列值以字符串开头的行,2个问题,php,mysql,mysqli,substring,case,Php,Mysql,Mysqli,Substring,Case,我正在尝试获取多行和,每个和都有一个匹配的列字符串值,所有值都有一个匹配的4个字符前缀,但它不起作用,我需要一些帮助。另外,这种情况下,数据库上的查询成本是高还是低? 从这个开始: $sql = "SELECT col1 FROM table WHERE substr(col1,1,5)='$string'"; $query = mysqli_query($con, $sql); $row = mysqli_fetch_array($query,MYSQLI_ASSOC); $results

我正在尝试获取多行和,每个和都有一个匹配的列字符串值,所有值都有一个匹配的4个字符前缀,但它不起作用,我需要一些帮助。另外,这种情况下,数据库上的查询成本是高还是低? 从这个开始:

$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。。。因此,我希望获得数组中包含aaaa的所有col1结果,然后过滤每个string1和string2的存在数量。

查看您的代码,似乎您正在尝试获取col1中子字符串“string1”或“string2”的cout

 "select col1,  count(*) as  col_count
 from table
 WHERE substr(col1,1,5)= '$string' 
 and col1 in ('string1','string2')
 group by  col1"
您应该在COLU string和COLU COLU count中检索结果

后缀(假设字符6结束)

使用
SUBSTR(col1,LENGTH('$string')+1)
获取前缀后的列部分,并按此进行分组

使用类似于“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);

你能解释一下你想从表和列字符串中提取什么吗。。显示正确的数据样本和预期结果。。(我认为这可以直接在sql中完成)
$results
是一个字符串,而不是一个数组,您希望数组的键($results,'string1')是什么
返回?匹配列开头的最佳方法是使用
WHERE col1 LIKE'$string%'
我编辑了这个问题,以便更简洁地描述我想要表达的内容accomplish@scaisEdge请参阅editI,我希望获得包含string1的行数,以及包含string2后缀的行数,但是只有那些带有aaaa前缀的行中,
string1
string2
才是后缀,而不是前缀。我已经更新了您要查找的是col1而不是substr的答案,那么如果$tring='aaaaaaa'(1,5),查询应该返回两行,第一行是string1,第二行是string2,我想你们都给出了很好的答案,我会在一段时间内回来测试和检查答案我认为你们都给出了很好的答案,我会在一段时间内回来测试和检查答案我已经在答案中添加了说明如何获得所有结果的内容。非常感谢Barmar,他对mysql有很好的理解,我真的应该有时间学习更多
$counts = array();
while ($row = mysqli_fetch_assoc($query) {
    $counts[$row['suffix']] = $row['count'];
}
var_dump($counts);