1

我有两个表“小部件”和“点击”,两个表共享一个 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 的点击量排序。

回过头来看,在小部件表中添加点击列可能更容易,但我认为分离还有其他优势。

4

3 回答 3

2

您想要做的事情可以通过使用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 属性的复合键),以便您可以单独跟踪每个小部件上的每次点击。然后,您可以使用字符串COUNT()中的a 选择每个小部件的点击次数。SELECT取决于您尝试对数据库执行的操作。

于 2013-05-23T03:49:26.187 回答
1
$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, click c
WHERE w.id = c.id 
ORDER BY c.clicks DESC";

就如此容易。我不确定您为什么要重命名这些字段,但这似乎有点不必要。

在 MySQL 中的大多数情况下,您只需要从查询中指定您想要的内容。而 MySQL 会选择最佳方式来执行它并为您获取结果。

编辑:通过添加以下行来限制您的结果总是好的(考虑一个合理的数量):

LIMIT 10
于 2013-05-23T04:17:06.620 回答
0

你能张贴你的表格并指出你想显示的字段吗?你可以做这样的事情。

SELECT fields a, fields b
FROM widgets a JOIN clicks b
ON a.id = b.id
ORDER BY clicks
于 2013-05-23T03:55:01.327 回答