如何在MySQL或Go中从不同的where条件查询限制10条记录

velaa5lx  于 2023-04-10  发布在  Mysql
关注(0)|答案(1)|浏览(195)

假设我有下面的表,其中包含示例数据this mysql link,在Go项目中,我通过sql select * from users limit size offset (index-1)*size获得users的列表
但是现在10个数据项中的一个必须具有rank_value大于0的a记录,换句话说,每页具有10个记录,9个记录来自select * from users limit 9 where ran_value = 0,1个记录来自select * from users limit 1 > 0
我被困在这个,如何查询限制10记录从不同的条件在MySQL或去,非常感谢任何建议.

CREATE TABLE `users` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `name` varchar(45) DEFAULT '',
    `age` int(11) NOT NULL DEFAULT '0',
    `rank_value` int(11) NOT NULL DEFAULT '0',
    `insert_at` bigint NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
// init
db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
if err != nil {
    log.Fatal(err)
}

// create dbr session
sess := dbr.NewConnection(db, nil)

// query list
var users []User
_, err = sess.Select("*").From("users").OrderBy("insert_at desc").Offset((Index - 1) * Size).Limit(Size).Load(&users)
if err != nil {
    log.Fatal(err)
}

for _, user := range users {
    fmt.Println(user.Name)
}
7gcisfzg

7gcisfzg1#

将LIMIT与UNION组合使用可能是您所需要的。这将允许您检索condition_a下的n行和condition_b下的m

(SELECT * FROM table_name WHERE condition_a LIMIT n)
UNION
(SELECT * FROM table_name WHERE condition_b LIMIT m);

所以你的案子,

(SELECT * FROM users WHERE ran_val=0 LIMIT 9)
UNION
(SELECT * FROM users WHERE ran_val>1 LIMIT 1);

相关问题