gpt4 book ai didi

mysql - 我想从每个类别(4 个类别)中获取访问量最大的文章

转载 作者:行者123 更新时间:2023-11-29 02:29:54 25 4
gpt4 key购买 nike

我在数据库的一个表中有 4 个类别
我想从数据库中的每个类别中获取访问次数最多的四篇文章。
这意味着得到 (类别 1 中访问次数最多的 4 篇文章) + (类别 2 中访问次数最多的 4 篇文章) + (类别 3 中访问次数最多的 4 篇文章) + (来自类别 4 的 4 篇文章访问次数最多) = 来自 4 个类别 的总 16 篇文章

我想通过一个查询来做到这一点。

普通查询:

$sql="select ID,name,country from article where `active`='yes' order by `visit` desc limit 16 ";

文章表结构:

CREATE TABLE `article` (
`ID` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`country` varchar(50) NOT NULL default '',
`town` varchar(30) NOT NULL default '',
`other_town` varchar(30) NOT NULL default '',
`title` varchar(255) NOT NULL default '0',
`size` varchar(30) NOT NULL default '',
`type` varchar(30) NOT NULL default '',
`tel` varchar(30) NOT NULL default '',
`mobile` varchar(30) NOT NULL default '',
`connect` varchar(30) NOT NULL default '',
`email` varchar(30) NOT NULL default '',
`photo1` varchar(100) NOT NULL default '',
`print` varchar(30) NOT NULL default '',
`small_pic1` varchar(100) NOT NULL default '',
`detail` text NOT NULL,
`add_by` int(11) NOT NULL default '0',
`cat` int(11) NOT NULL default '0',
`goods_type` enum('new','old') NOT NULL,
`add_date` date NOT NULL default '0000-00-00',
`end_date` date NOT NULL default '0000-00-00',
`period` varchar(30) NOT NULL default '',
`visit` int(11) NOT NULL default '0',
`comment` int(30) NOT NULL default '0',
`fav` varchar(15) NOT NULL default '',
`favorite` varchar(15) NOT NULL default '',
`active` varchar(15) NOT NULL default '',
`rate` int(11) NOT NULL default '0',
`short` text NOT NULL,
`add_to` varchar(50) NOT NULL default '',
`author` varchar(50) NOT NULL default '',
`author_img` varchar(50) NOT NULL default '',
`lang` varchar(10) NOT NULL default '',
`budget` varchar(50) NOT NULL default '',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;

类别表结构:

CREATE TABLE `category` (
`ID` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`img` varchar(255) NOT NULL default '',
`sub` int(11) NOT NULL default '0',
`type` varchar(20) NOT NULL default '',
`lang` varchar(10) NOT NULL default '',
`active` varchar(25) NOT NULL default '',
`add_by` int(11) NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

最佳答案

这应该可以做到。基本上确定每个类别的行号,然后按访问列排序并选择前 4 个。这是一个压缩版本,但应该明白这一点(添加您需要返回的字段):

SELECT Id, Cat, Visit, Name
FROM (
SELECT
@curRow:=CASE WHEN @prevRow = A.cat THEN @curRow+1 ELSE 1 END AS rn,
A.Id,
A.Visit,
A.Cat, A.Name,
@prevRow:=A.cat AS clset
FROM (SELECT A.Id, C.Id as Cat, A.Visit, C.Name
FROM Articles A
JOIN Category C ON A.cat = C.id
ORDER BY A.Cat, A.Visit DESC
) A
JOIN (SELECT @curRow:=0) r
JOIN (SELECT @prevRow:=0) r2
) B
WHERE rn <= 4

还有一些 fiddle :http://sqlfiddle.com/#!2/b7260/1

祝你好运。

关于mysql - 我想从每个类别(4 个类别)中获取访问量最大的文章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com