我有一个表,其中客户端具有从高到低的优先级。我想先看到最高优先级的唯一客户端。这是我现在的桌子。
我想看到像这样的输出
试试这个。这将根据您的要求进行
SELECT COUNT(id) AS coun,`client`,priority FROM `pi`
WHERE priority='high' GROUP BY `client`,priority ORDER BY coun DESC
如果你需要和我上面写的一样的回复。
$result=mysql_query(SELECT*FROM Tablename WHERE Priority='high'AND client='a');$num_rows=mysql_num_rows($result);
echo$num_rows;
我认为这有帮助。。。
解释
好吧,我想我明白你的要求了,如果我错了,请纠正我:
您希望获得数据库中每个客户端的高优先级条目的数量,即对于客户端"a",您需要数字"3",因为"a"有3个高优先级条目。客户"b"只有一个,所以您希望为他返回数字"1"。
实施
为此,我们需要使用PHP。让我们从查询数据库开始:
SELECT client, priority FROM pi ORDER BY client
查询为每个表行中的client
和priority
列选择值。它是按client
列排序的,因此所有客户端都被分组在一起——这在以后会很重要
现在,我们要做的是循环遍历查询中的每个结果。只要client
相同,并且priority
为高,我们就增加一个计数器。当client
发生变化时(即,我们到达不同的客户端),我们回显client
的值和计数器,从而创建OP想要的表。然后我们重置计数器,并开始为新客户端做同样的事情。
代码
以下是您的问题的最终PHP代码:
<?php
$c = mysqli_connect("localhost","root","","db");
$q = "SELECT client, priority FROM pi ORDER BY client";
$r = mysqli_query($c,$q);
$a = mysqli_fetch_assoc($r);
$client = $a["client"];
$count = 0;
echo "<table><tr><td>Client</td><td>Priority</td></tr>";
while ($a!=null) {
if ($a["client"]!=$client) {
echo "<tr><td>$client</td><td>$count</td></tr>";
$client = $a["client"];
$count = 0;
}
if ($a["priority"]=="high") {
$count++;
}
$a = mysqli_fetch_assoc($r);
}
echo "<tr><td>$client</td><td>$count</td></tr></table>";
?>