php - 如何编写此 mysql 连接查询,然后根据需要进行排序?

标签 php mysql

我有两个表“widgets”和“clicks”,两个表共享一个 ID 列。

我需要编写一个查询,通过 id 连接小部件和点击表,然后我需要按点击的顺序返回数据,所以点击次数最多的小部件首先返回,然后下线。

我至少尝试过将初始查询放在一起,但我仍然需要帮助:

       $query = "SELECT widgets.id AS w_id, 
       clicks.id AS c_id, 
       widgets.manf_id AS w_manf,
       widgets.name AS w_name, 
       widgets.widgetlink AS w_link, 
       widgets.type_id AS w_type_id, 
       widgets.image_url AS w_url, 
       clicks.clicks AS c_clicks 
       FROM widgets, clicks WHERE widgets.id = clicks.id ";

其他重要信息:

有些小部件可能没有任何点击,所以我需要从两个表中收集所有信息,然后按每个 id 的点击量排序。

回想起来,向小部件表添加点击列可能更容易,但我认为分离还有其他优势。

最佳答案

你想做的可以通过使用Joins来实现.您可以从两个表中SELECT 所需的列,然后通过widget_id 加入它们,以便显示所有小部件,与点击量无关:

$query = "SELECT w.id AS w_id, 
                 c.id AS c_id, 
                 w.manf_id AS w_manf,
                 w.name AS w_name, 
                 w.widgetlink AS w_link, 
                 w.type_id AS w_type_id, 
                 w.image_url AS w_url, 
                 c.clicks AS c_clicks 
          FROM widgets w
          LEFT JOIN clicks c ON w.id = c.id 
          ORDER BY c.clicks DESC";

当然,这是假设 clicks.clicks 列存储小部件中的点击量。

额外

您还可以考虑存储每次点击,为每次点击添加一个日期时间属性和一个使用唯一标识符的主键(或来自日期时间、IP 地址和 ID 属性的复合键),这样您就可以单独跟踪每次点击每个小部件。然后,您可以使用 SELECT 字符串中的 COUNT() 选择每个小部件的点击次数。取决于您要对数据库执行的操作。

关于php - 如何编写此 mysql 连接查询,然后根据需要进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16705312/

相关文章:

php - 电子邮件字段未保存到数据库 - Android 注册页面

php - 从本地主机连接服务器数据库时出错

php - mysqli 无法在连接上设置 session 时区。保持 UTC。在 RDS mysql 实例上

php - 带有文本的图像不起作用并添加一些 Html

php - 根据最大文件大小缩放图像

php - 为什么 Apache 打印我的 PHP 文件的内容而不是将它们传递给 PHP-FPM?

mysql - 如何在一个 MySQL 查询中查询人与人之间的 2 级联系?

php - While 循环遍历 mysql 数据库列表

php - 如果在 MYSQL 表中找不到数据,请写一些内容(PHP)

javascript - 如何仅针对用户选择的项目从数据库中获取列值到弹出表单上?