Mysql 获取此查询中的数据计数的更好方法?
我有一个图书库(Mysql 获取此查询中的数据计数的更好方法?,mysql,sql,select,foreign-keys,union,Mysql,Sql,Select,Foreign Keys,Union,我有一个图书库(books)和另一个表格,每当有人借书或带书回来时,它都会被记录下来(book\u loans) 基本上,我想看看在某个时间签出的所有书籍,有多少: 属于“幻想”类型 有500多页 是精装书吗 我想一次完成这一切,现在我正在使用4个查询,有更好的方法吗 PS:book\u loans。bookID是书籍的外键。id: SELECT * FROM ( SELECT COUNT(*) FROM `books` AS bks INNER JOIN `book_lo
books
)和另一个表格,每当有人借书或带书回来时,它都会被记录下来(book\u loans
)
基本上,我想看看在某个时间签出的所有书籍,有多少:
- 属于“幻想”类型
- 有500多页
- 是精装书吗
book\u loans
。bookID是书籍的外键。id:
SELECT * FROM
(
SELECT COUNT(*) FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1 AND bks.genre = 'fantasy'
UNION
SELECT COUNT(*) FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1 AND bks.pages > 500
UNION
SELECT COUNT(*) FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1 AND bks.hardcover = 1
) x;
对于这一点,总共进行4次查询似乎效率很低。如果您只想对所有3次查询进行合计,或者如果您需要3次不同的合计,则每个查询一次,或者您需要一些不同的内容,那么这应该可以满足您的需要
SELECT SUM(bks.genre = 'fantasy') as fantasy,
SUM(bks.pages > 500) as pages,
SUM(bks.hardcover = 1) as hardcover
FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1
SELECT COUNT(*) FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1
AND (
bks.genre = 'fantasy'
OR bks.pages > 500
OR bks.hardcover = 1
)
如果你只想知道3个总数是多少,或者如果你需要3个不同的总数,每一个都有一个,或者你需要一些不同的东西,这应该是你需要的
SELECT COUNT(*) FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1
AND (
bks.genre = 'fantasy'
OR bks.pages > 500
OR bks.hardcover = 1
)
这是具有类似结果的juergen d的替代品;但我会和他的第一个一起去。与他的不同,在这本书中,匹配多个条件的书只会包含在第一个条件的计数中
但是,如果BooGiOffice表很大,您可能仍然考虑WHERE子句中的OR条件。
这是具有类似结果的juergen d的替代品;但我会和他的第一个一起去。与他的不同,在这本书中,匹配多个条件的书只会包含在第一个条件的计数中
但是,如果BooGiOffice表很大,您可能仍然考虑WHERE子句中的OR条件。
非常感谢!非常感谢你!