Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để sử dụng đối diện của BETWEEN trong một truy vấn MySQL?

Điều duy nhất tôi có thể nghĩ là, bằng cách nào đó, các biểu thức xác định khoảng ngày đang trả về một phần thời gian (những strtotime() giống như thủ phạm). Câu trả lời này giao dịch với hai tùy chọn (tùy chọn 2 là tùy chọn tốt) khi ngày bao gồm một phần thời gian.

Trong trường hợp cụ thể của bạn, tôi nghĩ đây sẽ là cách tiếp cận tốt nhất để giải quyết vấn đề:

SELECT loanac.id, loanac.name, loanac.lacc, loanac.phone
     , SUM(loantrans.in) as totalin, SUM(loantrans.out) as totalout 
FROM loanac
     INNER JOIN loantrans on loanac.lacc = loantrans.account
-- Instead of an implicit join in the WHERE clause, use an explicit INNER JOIN
WHERE date(loantrans.date) < date('$range')  
  AND date(loantrans.date) > date('$date')
GROUP BY loanac.lacc
HAVING SUM(IFNULL(`loantrans`.`out`,0)) > SUM(IFNULL(`loantrans`.`in`,0))

Lưu ý rằng date() hàm "loại bỏ" phần thời gian của giá trị.

Một điều nữa:Mã của bạn có thể dễ bị tấn công SQL Injection . Vui lòng hãy xem ở đây cho một ví dụ (hài hước) về vấn đề đó là gì và mẹo về cách đối phó với nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:không có trong GROUP BY

  2. sql tham gia dưới dạng biểu đồ venn

  3. Chuyển đổi mysql TIME từ 24 HR sang định dạng AM / PM

  4. Truy vấn SQL để lấy Tổng của tất cả các giá trị cột trong hàng cuối cùng của tập kết quả cùng với tổng của hàng (nhóm theo)

  5. Sự khác biệt giữa THÔNG TIN DỮ LIỆU và THÔNG TIN ĐỊA PHƯƠNG TẢI DỮ LIỆU