如何使用mySQL和PHP实现这种排序?

Ene*_*oma 4 php mysql

我有这个名为"categories"的表,有三个字段,如下所示

cat     | order | id
--------|-------|----
News    |  3    | 23
Hi-Tech |  2    | 15
Biz     |  5    | 8
Health  |  1    | 3
Run Code Online (Sandbox Code Playgroud)

另外,我有另一个名为"链接"的表,如下所示

link    | order | cat-id
--------|-------|-------
link1   |  2    | 23
link2   |  8    | 15
link3   |  5    | 8
link4   |  6    | 15
link5   |  2    | 15
link6   |  4    | 23
link7   |  1    | 3
link8   |  1    | 8
Run Code Online (Sandbox Code Playgroud)

我想要实现的是对类别进行排序,并在每个类别下面对类别cat-id/id链接进行排序,如下所示:

健康
链接7

高科技
link5
link4
link2

新闻
link1
link6

商业
链接8
link3

我成功地显示了已排序的类别,但我在它之后失去它.

我的目标是在页面上显示这个,所以我想我必须使用PHP和mySQL.

Pao*_*ino 16

查询就是这样:

SELECT c.cat, l.link, c.id
FROM links l INNER JOIN categories c
ON l.cat-id = c.id
ORDER BY c.`order`, l.`order`
Run Code Online (Sandbox Code Playgroud)

这是在工作.

为了在页面上显示它,它看起来像这样:

mysql_connect(<host>, <username>, <password>);

$q = mysql_query("<query from above>");
$last_cat = 0;
while($row = mysql_fetch_assoc($q)) {
    if($row['id'] != $last_cat) {
        print '<h3>' . $row['cat'] . '</h3>';
        $last_cat = $row['id'];
    }
    print $row['link'] . '<br>';
}
Run Code Online (Sandbox Code Playgroud)

  • @Kaoukkos:在数据库和编程术语中,这些数字是儿童游戏.在进入分页等之前,这段代码几乎是处理这个代码的标准方法.它只对数据库进行一次访问,并在一个循环中打印出所有内容.从可用性的角度来看,60x5似乎有点向用户展示,但这超出了这个问题的范围...... (3认同)

Tah*_*ksu 5

我在脑海里写了这个,所以没有测试它,但它有点像这样:

$q = mysql_query("select * from categories c 
      left join links l 
      on l.cat-id=c.id 
      order by c.order,l.order");

$last_cat = -1;

while($row=mysql_fetch_assoc($q)){
    if($last_cat!=$row["cat"]){
        echo "<br><b>".$row["cat"]."</b><br>";
        $last_cat=$row["cat"];
    }
    echo $row["link"]."<br>";
}
Run Code Online (Sandbox Code Playgroud)