Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql数据库中查找最新值_Mysql - Fatal编程技术网

在mysql数据库中查找最新值

在mysql数据库中查找最新值,mysql,Mysql,我有两个表,用于存储上传到站点的图像信息,即调用图像和审核。上传图像时,其路径存储在image.imageLocation中,用于审核时,试听保存到同一个表中。auditd是用于将表连接在一起的值 我正在尝试进行一个查询,该查询将告诉我使用审核日期(即audit.dateStart)的图像的最新审核 到目前为止我的疑问是 SELECT * FROM ( SELECT image.imageID AS newest_image, image.userID AS image_userID,

我有两个表,用于存储上传到站点的图像信息,即调用图像和审核。上传图像时,其路径存储在image.imageLocation中,用于审核时,试听保存到同一个表中。auditd是用于将表连接在一起的值

我正在尝试进行一个查询,该查询将告诉我使用审核日期(即audit.dateStart)的图像的最新审核

到目前为止我的疑问是

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