如何在php中对id进行排序?
我如何用php对ID进行排序?我已经尝试过这样做,但没有显示出良好的响应 这是我的密码如何在php中对id进行排序?,php,sorting,Php,Sorting,我如何用php对ID进行排序?我已经尝试过这样做,但没有显示出良好的响应 这是我的密码 $sql=“按id顺序从站点选择*描述限制10”; $result=$conn->query($sql); 如果($result->num_rows>0){ //每行的输出数据 而($row=$result->fetch_assoc()){ $site_id=$row[“id”]; $result2=mysql_查询(“从site_id='$site_id''的状态中选择COUNT(mon_id)); 而(
$sql=“按id顺序从站点选择*描述限制10”;
$result=$conn->query($sql);
如果($result->num_rows>0){
//每行的输出数据
而($row=$result->fetch_assoc()){
$site_id=$row[“id”];
$result2=mysql_查询(“从site_id='$site_id''的状态中选择COUNT(mon_id));
而($row2=mysql\u fetch\u数组($result2))
{
$mon_id=$row2['COUNT(mon_id)';
echo$mon_id;?>
您的问题是,您查询了两次,并且对第一个查询结果的每一行执行了第二个查询。因此,您排序执行了10次,但每次仅对一行执行
我假设你想要每个站点的状态计数?!
然后您可以使用此查询:
SELECT COUNT(status.mon_id) as cnt, status.site_id
FROM status, sites
WHERE status.site_id=sites.id
GROUP BY sites.id
ORDER BY sites.id, cnt
DESC LIMIT 10;
此查询首先按sites.id排序,然后按cnt排序,并将结果限制为10。
因此,您只需要一个查询
插入数据库连接信息
mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db("mydb");
$result = mysql_query("SELECT COUNT(status.mon_id) as cnt, status.site_id
FROM status, sites
WHERE status.site_id=sites.id
GROUP BY sites.id
ORDER BY sites.id, cnt DESC
LIMIT 10");
if($result!=false){
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
$mon_id = $row['cnt'];
echo $mon_id."<br />";
}
}else{
echo "mysql error";
}
mysql\u connect(“本地主机”、“mysql\u用户”、“mysql\u密码”)或
die(“Keine Verbindung möglich:.mysql_error());
mysql_select_db(“mydb”);
$result=mysql\u查询(“选择COUNT(status.mon\u id)作为cnt,status.site\u id
从状态、站点
其中status.site\u id=sites.id
按站点分组。id
按sites.id、cnt DESC排序
限额(10”);
如果($result!=false){
而($row=mysql\u fetch\u array($result,mysql\u ASSOC))
{
$mon_id=$row['cnt'];
echo$mon_id.“
”;
}
}否则{
回显“mysql错误”;
}
将按
顺序添加到计数中。尝试-
$result2 = mysql_query("SELECT COUNT(mon_id) as total FROM status Where site_id='$site_id'");
while($row2=mysql_fetch_array($result2))
{
$mon_id[] = $row2['total'];
}
将计数存储到数组中,然后对其执行rsort()
rsort($mon_id);
你可以试试这个
$sql = "SELECT * FROM Sites ORDER BY id DESC LIMIT 10";
$result = $conn->query($sql);
$mon_id = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$result2 = mysql_query('SELECT COUNT(mon_id) FROM status Where site_id='.$row['id']);
if ($result2->num_rows > 0) {
while($row2=mysql_fetch_array($result2)) {
$mon_id[] = $row2['COUNT(mon_id)'];
}
}
}
rsort($mon_id);
foreach ($mon_id as $key => $val) {
echo "$key = $val\n";
}
}
我做了一把小提琴:
错误报告(E_ALL);
ini设置(“显示错误”,1);
$sql='select*,将(mon_id)作为sum_id从站点计算为si
内部连接状态为st
在si.id=st.site\u id上
按st.site\u id分组
按和排序_iddesc';
$result=$conn->query($sql);
而($row=$result->fetch_assoc()){
echo$row['id'.-'.$row['sum_id'.]。
;
}
按别名排序\u count desc;
其结果与我的结果相同可能有错误。可能您的表名为“Sites”,我键入了“Sites”,可以解决此问题。我已使用Sites更改了Sites,但其相同的意思是空白页面mysql\u fetch\u array()期望参数1是资源,在/home/Fixed中给定的对象。但是都德,你在所有方面都不做任何努力。我已经从你的所有代码更改了站点到站点,并且它是这样工作的。1 1 1 2 1 2 1 2 1 2 1 1 1但我想显示2 1 OK,将“ORDER BY Sites.id,cnt DESC”更改为“ORDER BY cnt DESC”我更改了这个,它显示了相同的结果,这与我在这里发布问题时的问题相同…我想对所有的重用进行排序,如图2 2 2 1 1 1 1 1它显示为图1 1 2 1 2 1 2 3 2 4 1我需要更多帮助。我如何用ID显示站点名称
error_reporting(E_ALL);
ini_set('display_errors', 1);
$sql = 'select *, count(mon_id) as sum_id from Sites as si
inner join status as st
on si.id = st.site_id
group by st.site_id
order by sum_id desc';
$result = $conn->query($sql);
while($row = $result->fetch_assoc()){
echo $row['id'] . ' - ' . $row['sum_id'] . '<br/>';
}