在mysql数据库中查找最新值
我有两个表,用于存储上传到站点的图像信息,即调用图像和审核。上传图像时,其路径存储在image.imageLocation中,用于审核时,试听保存到同一个表中。auditd是用于将表连接在一起的值 我正在尝试进行一个查询,该查询将告诉我使用审核日期(即audit.dateStart)的图像的最新审核 到目前为止我的疑问是在mysql数据库中查找最新值,mysql,Mysql,我有两个表,用于存储上传到站点的图像信息,即调用图像和审核。上传图像时,其路径存储在image.imageLocation中,用于审核时,试听保存到同一个表中。auditd是用于将表连接在一起的值 我正在尝试进行一个查询,该查询将告诉我使用审核日期(即audit.dateStart)的图像的最新审核 到目前为止我的疑问是 SELECT * FROM ( SELECT image.imageID AS newest_image, image.userID AS image_userID,
SELECT * FROM (
SELECT image.imageID AS newest_image, image.userID AS image_userID,
image.auditID as image_auditID, image.type AS image_type,
image.imageLocation AS location
from image
) image
LEFT JOIN audit ON image_auditID = audit.auditID
WHERE image_userID = '$id' AND image_type = 'standard'
AND dateStart = MAX(dateStart)
GROUP by location
这会抛出一个错误,表示组使用不当
任何帮助都将受到感激
这是表结构
audit
auditID varchar(255)
userID int(11)
dateStart date
dateEnd date
auditName varchar
auditDesc varchar
imagesUploaded tinyint
actionPlan varchar
auditComplete tinyint
dateComplete datetime
image
imageID int(10)
name varchar(255)
auditID varchar(255)
imageGrade int(1)
exposure varchar(255)
positioning varchar(255)
patient varchar(255)
equipment varchar(255)
positioningReason varchar(255)
exposureReason varchar(255)
patientReason varchar(255)
comment varchar(255)
auditDate datetime
imageLocation varchar(255)
thumbnail text
xrayType varchar(10)
type varchar(255)
userID int(11)
Some sample data
imageID = 563
name = standard_16.jpg
auditID = 1360318160843025059
imageLocation = upload/2/standards/standard_16.jpg
type = standard
userID = 2
imageID = 565
name = standard_18.jpg
auditID = 1360318160843025059
imageLocation = upload/2/standards/standard_18.jpg
type = standard
userID = 2
imageID = 566
name = standard_18.jpg
auditID = 13603248241777655575
imageLocation = upload/2/standards/standard_18.jpg
type = standard
userID = 2
auditID = 1360318160843025059
userID = 2
dateStart = 2013-02-14
auditID = 13603248241777655575
userID = 2
dateStart = 2013-02-09
正如您所看到的,相同的图像可以用于多个审计,我想知道哪个审计最后使用了图像,在本例中,结果将是审计1360318160843025059您是否尝试使用子查询。此子查询将获得每次审核的maxdateStart。然后,您将此结果加入审核表,以返回具有最大日期的行的所有详细信息:
SELECT
i.imageID AS newest_image,
i.userID AS image_userID,
i.auditID as image_auditID,
i.type AS image_type,
i.imageLocation AS location,
a1.*
FROM image i
LEFT JOIN audit a1
on i.auditID = a1.auditID
INNER JOIN
(
select auditID, max(dateStart) MaxDate
from audit
group by auditID
) a2
on a1.auditID = a2.auditID
and a1.dateStart = a2.MaxDate
WHERE i.userID = '$id'
AND i.type = 'standard'
编辑,如果您只选择上次的图像/审核,则可以使用:
SELECT i.imageID AS newest_image,
i.userID AS image_userID,
i.auditID as image_auditID,
i.type AS image_type,
i.imageLocation AS location,
a1.*
FROM image i
LEFT JOIN audit a1
on i.auditID = a1.auditID
INNER JOIN
(
select max(dateStart) MaxDate
from audit
) a2
on a1.dateStart = a2.MaxDate
WHERE i.type = 'standard';
看
只是另一种猜测:
SELECT i.imageID AS newest_image,
i.userID AS image_userID,
i.auditID AS image_auditID,
i.type AS image_type,
i.imageLocation AS location,
a.*
FROM image i
JOIN audit a
ON i.auditID = a.auditID
JOIN
(
SELECT i.imageLocation, MAX(a.dateStart) MaxDate
FROM image i
JOIN audit a
ON i.auditID = a.auditID
WHERE i.userID = '$id'
AND i.type = 'standard'
GROUP BY i.imageLocation
) g
ON g.MaxDate = a.dateStart
AND g.imageLocation = i.imageLocation
WHERE i.userID = '$id'
AND i.type = 'standard'
试试这个
SELECT * FROM (
SELECT image.imageID AS newest_image, image.userID AS image_userID,
image.auditID as image_auditID, image.type AS image_type,
image.imageLocation AS location
from image
GROUP by location
) image
LEFT JOIN audit ON image_auditID = audit.auditID
WHERE image_userID = '$id' AND image_type = 'standard'
AND dateStart = MAX(dateStart)
编辑
你能添加完整准确的错误消息吗?就是这样,组函数使用不当。那么,你为什么要在第一个select中执行那个奇怪的子查询呢?有什么原因不能只删除select*from和image?是的,它会为字段提供别名,因为其中一个字段在两个表中是相同的,但不需要子查询来为字段名添加别名..您好,感谢您的帮助,但是该查询会显示图像使用过的所有实例,而不仅仅是最新的实例。我刚刚添加了它,我也得到了同样的结果result@tatty27您可以发布您的表结构和一些示例数据,或者更好地创建一个sql FIDLE吗@tatty27你会为每一张唱片创建一个新的试唱吗?查看表格的详细信息将非常有用helpful@bluefeet:德纳达。这是一个处理新数据的查询:使用两个veriosn,一个用于user_id=2,另一个稍微修改,对于所有user_idHI,它会给出完全相同的错误“无效使用组函数”表中的任何简单数据?恐怕它会返回空结果
SELECT image.imageID AS newest_image, image.userID AS image_userID,
image.auditID as image_auditID, image.type AS image_type,
image.imageLocation AS location
from image
LEFT JOIN audit ON image.userID = audit.auditID
INNER JOIN
(
select max(dateStart) MaxDate
from audit
) audit2
on audit.dateStart = audit2.MaxDate
WHERE image.type = 'standard'
GROUP by image.imageLocation