56,679
社区成员
发帖
与我相关
我的任务
分享
SELECT SQL_CALC_FOUND_ROWS
a.ProductID,a.ProductName,a.ExpiryDate,a.ExpiryUnit,b.ProductionDate,b.WareHouseID,b.BinID,b.ShelfID
FROM product a
LEFT JOIN warehouseinventory b ON a.ProductID=b.ProductID
WHERE DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)<=NOW() and a.CompanyID=@CompanyID
LIMIT 0,10;
SELECT FOUND_ROWS() AS TotalRecords;
SELECT CASE ExpiryUnit
WHEN 1 then
(SELECT a.ProductID
FROM product a
LEFT JOIN warehouseinventory b ON a.ProductID=b.ProductID
WHERE DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)<=NOW() and a.CompanyID=@CompanyID
)
ELSE '' END
AS t
FROM product
SELECT SQL_CALC_FOUND_ROWS
a.ProductID,a.ProductName,a.ExpiryDate,a.ExpiryUnit,b.ProductionDate,b.WareHouseID,b.BinID,b.ShelfID
FROM product a
LEFT JOIN warehouseinventory b ON a.ProductID=b.ProductID
WHERE ( a.ExpiryUnit=1 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)<=NOW() )
OR ( a.ExpiryUnit=2 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH)<=NOW())
OR ( a.ExpiryUnit=3 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate YEAR)<=NOW() )
AND a.CompanyID=@CompanyID
LIMIT 0,10;
SELECT FOUND_ROWS() AS TotalRecords;
[/quote]
感觉你这个不符合逻辑呀
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH)
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate YEAR)
你这个 a.ExpiryDate 应该是保质期吧,如果写的是12个月呢?
那你是要加12年?
其次 就是你这个条件都是用or连接的,那就是优先级相等的条件,满足一条就行,是不是应该考虑一下实际的业务,应该有个优先级的判断吧?
[/quote]如果是12个月的她的ExpiryUnit=2,会在( a.ExpiryUnit=2 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH))中筛选,业务逻辑就是筛选全部符合条件的,不需要优先级判断。SELECT SQL_CALC_FOUND_ROWS
a.ProductID,a.ProductName,a.ExpiryDate,a.ExpiryUnit,b.ProductionDate,b.WareHouseID,b.BinID,b.ShelfID
FROM product a
LEFT JOIN warehouseinventory b ON a.ProductID=b.ProductID
WHERE ( a.ExpiryUnit=1 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)<=NOW() )
OR ( a.ExpiryUnit=2 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH)<=NOW())
OR ( a.ExpiryUnit=3 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate YEAR)<=NOW() )
AND a.CompanyID=@CompanyID
LIMIT 0,10;
SELECT FOUND_ROWS() AS TotalRecords;
[/quote]
感觉你这个不符合逻辑呀
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH)
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate YEAR)
你这个 a.ExpiryDate 应该是保质期吧,如果写的是12个月呢?
那你是要加12年?
其次 就是你这个条件都是用or连接的,那就是优先级相等的条件,满足一条就行,是不是应该考虑一下实际的业务,应该有个优先级的判断吧?
[/quote]如果是12个月的她的ExpiryUnit=2,会在( a.ExpiryUnit=2 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH))中筛选,业务逻辑就是筛选全部符合条件的,不需要优先级判断。[/quote]
那就没有问题了,可以这么写SELECT SQL_CALC_FOUND_ROWS
a.ProductID,a.ProductName,a.ExpiryDate,a.ExpiryUnit,b.ProductionDate,b.WareHouseID,b.BinID,b.ShelfID
FROM product a
LEFT JOIN warehouseinventory b ON a.ProductID=b.ProductID
WHERE ( a.ExpiryUnit=1 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)<=NOW() )
OR ( a.ExpiryUnit=2 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH)<=NOW())
OR ( a.ExpiryUnit=3 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate YEAR)<=NOW() )
AND a.CompanyID=@CompanyID
LIMIT 0,10;
SELECT FOUND_ROWS() AS TotalRecords;
[/quote]
感觉你这个不符合逻辑呀
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH)
DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate YEAR)
你这个 a.ExpiryDate 应该是保质期吧,如果写的是12个月呢?
那你是要加12年?
其次 就是你这个条件都是用or连接的,那就是优先级相等的条件,满足一条就行,是不是应该考虑一下实际的业务,应该有个优先级的判断吧?
SELECT SQL_CALC_FOUND_ROWS
a.ProductID,a.ProductName,a.ExpiryDate,a.ExpiryUnit,b.ProductionDate,b.WareHouseID,b.BinID,b.ShelfID
FROM product a
LEFT JOIN warehouseinventory b ON a.ProductID=b.ProductID
WHERE ( a.ExpiryUnit=1 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate DAY)<=NOW() )
OR ( a.ExpiryUnit=2 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate MONTH)<=NOW())
OR ( a.ExpiryUnit=3 AND DATE_ADD(b.ProductionDate,INTERVAL a.ExpiryDate YEAR)<=NOW() )
AND a.CompanyID=@CompanyID
LIMIT 0,10;
SELECT FOUND_ROWS() AS TotalRecords;