Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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_Sql_Left Join - Fatal编程技术网

Mysql 带变量的复左连接

Mysql 带变量的复左连接,mysql,sql,left-join,Mysql,Sql,Left Join,Mysqli语句中的左连接有点问题。我有两个表,其中一个表有用于各种事件的单个条目。第二个表包含该事件的所有图像 我想要得到什么:我想要得到最后8个事件的一次返回,其中包含该事件的图像计数以及为该事件上传的最后一个图像 问题:简单的左连接将非常有用,但是这是一个障碍。。。有时,这些活动需要几天的时间。因此,将两个表连接在一起的是文件夹字段。但是,如果时间超过一天,结果也会有所不同。这使得事件与图像的匹配更加困难 可视示例: Title Folder Days

Mysqli语句中的左连接有点问题。我有两个表,其中一个表有用于各种事件的单个条目。第二个表包含该事件的所有图像

我想要得到什么:我想要得到最后8个事件的一次返回,其中包含该事件的图像计数以及为该事件上传的最后一个图像

问题:简单的左连接将非常有用,但是这是一个障碍。。。有时,这些活动需要几天的时间。因此,将两个表连接在一起的是文件夹字段。但是,如果时间超过一天,结果也会有所不同。这使得事件与图像的匹配更加困难

可视示例:

Title      Folder          Days     File         IMGCount     IMGFolder
------------------------------------------------------------------------
Event 1    2015-EventA     1        imgA2.jpg    2            2015-EventA
Event 2    2015-EventB     2        imgB1.jpg    2            2015-EventB-1 
Event 3    2015-EventC     3        imgC2.jpg    4            2015-EventC-2
SELECT t1.*, t2.IMGCount, t2.File, T2.Folder AS IMGFolder
 FROM Events as t1
 LEFT JOIN (select count(File) AS IMGCount, Folder, File
         FROM Images GROUP BY Folder ORDER BY Date DESC LIMIT 8)
AS t2
on t1.Folder LIKE t2.Folder
OR t1.Folder LIKE t2.Folder || '-1'
OR t1.Folder LIKE t2.Folder || '-2'
OR t1.Folder LIKE t2.Folder || '-3'
OR t1.Folder LIKE t2.Folder || '-4'
   ORDER BY Added DESC LIMIT 8
表格:事件

表格:图像

我正在寻找的结果(记住它是为该活动挑选最后上传的图像):

Title      Folder          Days     File         IMGCount     IMGFolder
------------------------------------------------------------------------
Event 1    2015-EventA     1        imgA2.jpg    2            2015-EventA
Event 2    2015-EventB     2        imgB1.jpg    2            2015-EventB-1 
Event 3    2015-EventC     3        imgC2.jpg    4            2015-EventC-2
SELECT t1.*, t2.IMGCount, t2.File, T2.Folder AS IMGFolder
 FROM Events as t1
 LEFT JOIN (select count(File) AS IMGCount, Folder, File
         FROM Images GROUP BY Folder ORDER BY Date DESC LIMIT 8)
AS t2
on t1.Folder LIKE t2.Folder
OR t1.Folder LIKE t2.Folder || '-1'
OR t1.Folder LIKE t2.Folder || '-2'
OR t1.Folder LIKE t2.Folder || '-3'
OR t1.Folder LIKE t2.Folder || '-4'
   ORDER BY Added DESC LIMIT 8
我所尝试的:

Title      Folder          Days     File         IMGCount     IMGFolder
------------------------------------------------------------------------
Event 1    2015-EventA     1        imgA2.jpg    2            2015-EventA
Event 2    2015-EventB     2        imgB1.jpg    2            2015-EventB-1 
Event 3    2015-EventC     3        imgC2.jpg    4            2015-EventC-2
SELECT t1.*, t2.IMGCount, t2.File, T2.Folder AS IMGFolder
 FROM Events as t1
 LEFT JOIN (select count(File) AS IMGCount, Folder, File
         FROM Images GROUP BY Folder ORDER BY Date DESC LIMIT 8)
AS t2
on t1.Folder LIKE t2.Folder
OR t1.Folder LIKE t2.Folder || '-1'
OR t1.Folder LIKE t2.Folder || '-2'
OR t1.Folder LIKE t2.Folder || '-3'
OR t1.Folder LIKE t2.Folder || '-4'
   ORDER BY Added DESC LIMIT 8
这几乎奏效了。。。但是事件表为所有匹配重复第一个事件的信息。。。因此,我得到了正确的图像表信息,但重复事件:

Title      Folder          Days     File         IMGCount     IMGFolder
------------------------------------------------------------------------
Event 1    2015-EventA     1        imgA2.jpg    2            2015-EventA
Event 1    2015-EventA     1        imgB1.jpg    2            2015-EventB-1 
Event 1    2015-EventA     1        imgC2.jpg    4            2015-EventC-2
我做错了什么

  • 这并不容易。首先选择“提供图像总数”
  • 第二,给出每个活动的最新日期图片
  • 最后给你什么是那个形象
  • Title      Folder          Days    Added
    -------------------------------------------
    Event1     2015-EventA     1       20151001
    Event2     2015-EventB     2       20150901
    Event3     2015-EventC     3       20150801
    
    File         Folder             Date
    ---------------------------------------
    imgA1.jpg    2015-EventA        20150930
    imgA2.jpg    2015-EventA        20151001
    imgB1.jpg    2015-EventB-1      20150910
    imgB2.jpg    2015-EventB-2      20150901
    imgC1.jpg    2015-EventC-1      20150910
    imgC2.jpg    2015-EventC-2      20151001
    imgC3.jpg    2015-EventC-2      20150930
    imgC4.jpg    2015-EventC-3      20150927
    
    SELECT imgC.*, imgFile.`File`
    FROM 
        (
          SELECT E.`Folder`, E.`Title`, E.`Days`, COUNT(I.`File`) as IMGCount
          FROM Events E
          JOIN Images I
           ON E.`Folder` = SUBSTRING(I.`Folder`, 1,11)
          GROUP BY E.`Folder`, E.`Title`, E.`Days`
        ) as imgC 
    JOIN 
        (
          SELECT E.`Folder`,  MAX(`Date`) as `LastDate`
          FROM Events E
          JOIN Images I
            ON E.`Folder` = SUBSTRING(I.`Folder`, 1,11)
          GROUP BY E.`Folder`
        ) as imgDate
    ON imgC.`Folder` = imgDate.`Folder`
    JOIN (
            SELECT E.`Folder`,  I.`File`, I.`Date`
            FROM Events E
            JOIN Images I
              ON E.`Folder` = SUBSTRING(I.`Folder`, 1,11)
          ) as imgFile
    ON imgDate.`Folder` = imgFile.`Folder`
    and imgDate.`LastDate` = imgFile.`Date`
    

    实际上,您应该修复数据结构。您需要连接表的正确键(例如事件id)

    但是,您可以通过聚合
    图像
    来获得计数和最长日期,然后返回到
    图像

    SELECT e.*, t2.IMGCount, t2.File, T2.Folder AS IMGFolder
    FROM Events e JOIN
         (select count(File) AS IMGCount,
                 substring_index(Folder, '-', 2) as efolder, MAX(date) as maxdate
          from Images
          GROUP BY eFolder
          ORDER BY maxdate DESC
          LIMIT 8
         ) i
         ON i.efolder = e.folder JOIN
         images ii
         ON substring_index(ii.Folder, '-', 2) = e.folder and
            ii.date = i.maxdate;
    

    我假设DATE是string?是的,对于DATE和AddedI,当我运行此命令时,我得到一个错误:#1064-您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,了解在“子字符串上的图像ii”\u index(ii.Folder,“-”,2)=e.Folder和“在第11行,我运行了此代码,但出于某种原因,它显示了大量图像。”。示例:
    folder event days IMGCount File 2009 Hemet Hemet Ryan Airshow 127 HemetRyan09_B-25J_Mitchell_3909.jpg 2009 Hemet Hemet Ryan Airshow 127 HemetRyan09_B-25J_Mitchell_402; 4024.jpg 2009 Hemet Hemet Ryan Airshow 127 Hemet Ryan09_B-25J_Mitchell_6587.jpg 2009 Hemet Ryan Ryan Airshow 127 Hemet C-53D_空中骑兵3875.jpg2009 Hemet Hemet Ryan Airshow 1 27 HemetRyan09_Dr_D_Taylorcraft_4207.jpg 2009 Hemet Hemet Ryan Airshow 1 27 HemetRyan09_EH-1H_Huey_5215.jpg
    Yikes,注释不能很好地处理代码,是吗?是的,您应该将您的注释作为附加信息放在您的问题中,或者更好的是更新我的SqlFiddle重新创建模式并将链接发送给我。顺便说一句,你的个人资料上有很酷的图片。杰卢斯:)现在我明白你在说什么了<代码>空中表演现在变得更加疯狂。我不知道摄影师为什么要做db,但是你应该听Gordon说,你应该改进db的设计,让事情在将来变得容易。对不起,你已经出城参加航展了!我最后用了你的答案和戈登的答案来得到我需要的。我怎样才能给你们两个答案呢?