如何最小化sql查询

wtzytmuj  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(373)

我有一个 booking mysql数据库中的表,我需要在其中获取3个数据。
1) 总预订量
2) 待预订(其中 is_confirm = 1 )
3) 完成预订(在哪里 is_confirm = 0 )
现在,我正在编写3个单独的查询来获取这个结果,但是如何使用1个查询来获取它呢?
当前查询:

$booking = new Admin;
$booking->rowQuery("SELECT count(bid) AS totalBooking FROM booking");
$bookingData = $booking->result->fetch_assoc();
$totalBooking = $bookingData['totalBooking'];

$booking->rowQuery("SELECT bid FROM booking WHERE is_confirm = 1 ");
$completeBooking = $booking->rows;

$booking->rowQuery("SELECT bid FROM booking WHERE is_confirm = 0 ");
$pendingBooking = $booking->rows;
46scxncf

46scxncf1#

SELECT count(bid) AS totalBooking FROM booking
UNION
SELECT bid FROM booking
WHERE is_confirm=1
UNION
SELECT bid FROM booking
WHERE is_confirm=0
wa7juj8i

wa7juj8i2#

聚合函数通常跳过 null s、 包括 group_concat . 如果你不介意的话 explode 稍后,您可以使用 case 用于获取ID的总预订和分隔字符串的表达式:

SELECT COUNT(bid) AS totalBooking,
       GROUP_CONCAT(CASE is_confirm WHEN 1 THEN bid END) AS pendingBookings,
       GROUP_CONCAT(CASE is_confirm WHEN 0 THEN bid END) AS completeBookings
FROM   booking
zwghvu4y

zwghvu4y3#

您可以使用case-sql。试试这个:

SELECT
    COUNT(CASE WHEN is_confirm = 1 THEN 1 END) AS confirmCount,
    COUNT(CASE WHEN is_confirm = 0 THEN 1 END) AS noconfirmCount,
    COUNT(*) AS total
FROM booking;

相关问题