Php 使用Mysql 5.7和Ubuntu 16.04进行分组不工作
我有这样的Sql查询Php 使用Mysql 5.7和Ubuntu 16.04进行分组不工作,php,mysql,Php,Mysql,我有这样的Sql查询 SELECT sig_name, sig_class_id, label, sig_priority, status, COUNT(*) as c FROM acid_event GROUP BY sig_name while ($row = mysqli_fetch_array($data, MYSQLI_ASSOC)) { if($row['status']==0 && $row['label']=='High'){
SELECT sig_name, sig_class_id, label, sig_priority, status, COUNT(*) as c FROM acid_event GROUP BY sig_name
while ($row = mysqli_fetch_array($data, MYSQLI_ASSOC)) {
if($row['status']==0 && $row['label']=='High'){
echo $row['c']." ".$row['sig_name']." ".$row['label']."<br>"; //Here is your count
$content = "ALARM\n ". $row['sig_name'] . "\nTotal : ". $row['c']. "\nLabel : " .$row['label'];
sendMessage($chatid, $content, $token);
$upstatus = mysqli_query($conn, "UPDATE acid_event SET status = '1' WHERE sig_class_id = '$row[sig_class_id]' AND sig_priority = '$row[sig_priority]'");
}
}
代码是这样的
SELECT sig_name, sig_class_id, label, sig_priority, status, COUNT(*) as c FROM acid_event GROUP BY sig_name
while ($row = mysqli_fetch_array($data, MYSQLI_ASSOC)) {
if($row['status']==0 && $row['label']=='High'){
echo $row['c']." ".$row['sig_name']." ".$row['label']."<br>"; //Here is your count
$content = "ALARM\n ". $row['sig_name'] . "\nTotal : ". $row['c']. "\nLabel : " .$row['label'];
sendMessage($chatid, $content, $token);
$upstatus = mysqli_query($conn, "UPDATE acid_event SET status = '1' WHERE sig_class_id = '$row[sig_class_id]' AND sig_priority = '$row[sig_priority]'");
}
}
while($row=mysqli\u fetch\u数组($data,mysqli\u ASSOC)){
如果($row['status']==0&&$row['label']==High')){
echo$row['c'].''.$row['sig_name'..''...$row['label'.]。
;//这是您的计数
$content=“ALARM\n”。$row['sig_name']。”\n总计:“..$row['c']。”\n标签:“..$row['label'];
sendMessage($chatid,$content,$token);
$upstatus=mysqli_query($conn,“更新acid_事件集状态='1',其中sig_类_id='$row[sig_类_id]'和sig_优先级='$row[sig_优先级]”;
}
}
但是没有错误,也没有输出(代码不执行)。我的代码有问题吗?
我想让输出像“SIG名称:XXXX和总数:xxx”
我被
更新:如果我通过phpmyadmin执行该sql,则输出为
尝试在具有多个可能结果的列上使用max()
,或者使用聚合函数
查询运行正常吗?如果您尝试以下方法:
while ($row = mysqli_fetch_array($data, MYSQLI_ASSOC))
{
if($row['status']==0 && $row['label']=='High')
{
echo $row['c']." ".$row['sig_name']." ".$row['label']."<br>";
$content = "ALARM\n ". $row['sig_name'] . "\nTotal : ". $row['c']. "\nLabel : " .$row['label'];
sendMessage($chatid, $content, $token);
$upstatus = mysqli_query($conn, "UPDATE acid_event SET status = '1' WHERE sig_class_id = '" . mysqli_real_escape_string($row['sig_class_id']) . "' AND sig_priority = '" . mysqli_real_escape_string($row['sig_priority']) . "'");
}
}
while($row=mysqli\u fetch\u数组($data,mysqli\u ASSOC))
{
如果($row['status']==0&&$row['label']==High'))
{
echo$row['c'].“”.$row['sig_name'].“”.$row['label']。“
”;
$content=“ALARM\n”。$row['sig_name']。”\n总计:“..$row['c']。”\n标签:“..$row['label'];
sendMessage($chatid,$content,$token);
$upstatus=mysqli_query($conn,“updateacid_事件集状态='1',其中sig_class_id=”)。mysqli_real_escape_字符串($row['sig_class_id'])。“'和sig_priority=”。mysqli_real_escape_字符串($row['sig_priority'])。”);
}
}
回答@danblack评论中提到的问题您被一个查询禁用,该查询按sig\u name
分组,并且在结果集中有sig\u class\u id
,label
和sig\u priority
,但不在groupby
中。更改sql_模式只会隐藏可能会得到错误结果的问题。可能会向我们显示一些示例输入数据和预期的输出。您当前的分组依据
查询基本上无效,因为您选择的是非聚合列。@danblack我在phpmyadmin中运行该查询没有错误,并且显示输出(查看更新问题)。如果您只需要sig\u名称
和计数,则使用选择sig\u名称,计数(*)按sig\U名称从acid\U事件组中提取的总计
。这应该行得通。啊,因此您可以在查询中使用WHERE status=0和label=“High”
,并在PHP中保留if
语句。这仍然将sig\u priority
作为一个未分组的字段,可能MAX(sig\u priority)
是这个结果字段的正确选择。我认为查询不起作用,我的代码不执行while或sendMessage函数注意,尝试提供引用的MySQL主要版本的链接(标题中)。在这一页上没有太大的区别,但对于其他答案可能有。