Symfony1 Symfony推进查询

Symfony1 Symfony推进查询,symfony1,propel,Symfony1,Propel,我想在Symfony/spreep上进行此查询 SELECT folders.NAME, COUNT(documents.NAME), COUNT(files.idfiles), SUM(files.size) FROM `folders` LEFT JOIN `documents_has_folders` ON (documents_has_folders.folders_idfolders = folders.idfolders) LEFT JOIN documents ON (doc

我想在Symfony/spreep上进行此查询

SELECT 
folders.NAME,
COUNT(documents.NAME),
COUNT(files.idfiles),
SUM(files.size)

FROM  `folders`
LEFT JOIN `documents_has_folders` ON (documents_has_folders.folders_idfolders = folders.idfolders)
LEFT JOIN documents ON (documents_has_folders.DOCUMENTS_IDDOCUMENTS=documents.IDDOCUMENTS) 
LEFT JOIN files ON (documents.IDDOCUMENTS=files.DOCUMENTS_IDDOCUMENTS) 

GROUP BY folders.idfolders
我做这个查询

$x = FoldersQuery::create()
            ->addSelectColumn(FoldersPeer::NAME)
            ->addSelectColumn("COUNT(".DocumentsPeer::IDDOCUMENTS.")")
            ->addSelectColumn("COUNT(".FilesPeer::IDFILES.")")
            ->addSelectColumn("SUM(".FilesPeer::SIZE.")")
            ->addJoin(DocumentsHasFoldersPeer::FOLDERS_IDFOLDERS, FoldersPeer::IDFOLDERS, CRITERIA::LEFT_JOIN)
            ->addJoin(DocumentsHasFoldersPeer::DOCUMENTS_IDDOCUMENTS, DocumentsPeer::IDDOCUMENTS, CRITERIA::LEFT_JOIN)
            ->addJoin(DocumentsPeer::IDDOCUMENTS, FilesPeer::DOCUMENTS_IDDOCUMENTS, CRITERIA::LEFT_JOIN)
            ->addGroupByColumn(FoldersPeer::IDFOLDERS)
            ->find();
这将返回:

500 | Internal Server Error | PropelException
Unable to execute SELECT statement [SELECT folders.NAME, COUNT(documents.IDDOCUMENTS), COUNT(files.IDFILES), SUM(files.SIZE) FROM LEFT JOIN folders ON (documents_has_folders.FOLDERS_IDFOLDERS=folders.IDFOLDERS) LEFT JOIN documents ON (documents_has_folders.DOCUMENTS_IDDOCUMENTS=documents.IDDOCUMENTS) LEFT JOIN files ON (documents.IDDOCUMENTS=files.DOCUMENTS_IDDOCUMENTS) WHERE folders.REMOVE_DATE IS NULL GROUP BY folders.IDFOLDERS] [wrapped: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN folders ON (documents_has_folders.FOLDERS_IDFOLDERS=folders.IDFOLDERS)' at line 1]
为什么没有桌子从???为什么它会创建错误的查询

非常感谢

编辑:

同样的问题,如果我这样做查询:

$c = new Criteria();
    $c->addSelectColumn(FoldersPeer::NAME);
    $c->addSelectColumn("COUNT(".DocumentsPeer::IDDOCUMENTS.")");
    $c->addSelectColumn("COUNT(".FilesPeer::IDFILES.")");
    $c->addSelectColumn("SUM(".FilesPeer::SIZE.")");

    $c->addJoin(DocumentsHasFoldersPeer::FOLDERS_IDFOLDERS, FoldersPeer::IDFOLDERS, CRITERIA::LEFT_JOIN);
    $c->addJoin(DocumentsHasFoldersPeer::DOCUMENTS_IDDOCUMENTS, DocumentsPeer::IDDOCUMENTS, CRITERIA::LEFT_JOIN);
    $c->addJoin(DocumentsPeer::IDDOCUMENTS, FilesPeer::DOCUMENTS_IDDOCUMENTS, CRITERIA::LEFT_JOIN);

    $c->addGroupByColumn(FoldersPeer::IDFOLDERS);
再过一次,从没有桌子

Unable to execute SELECT statement [SELECT folders.NAME, COUNT(documents.IDDOCUMENTS), COUNT(files.IDFILES), SUM(files.SIZE) FROM LEFT JOIN folders ON (documents_has_folders.FOLDERS_IDFOLDERS=folders.IDFOLDERS AND folders.remove_date IS NULL ) LEFT JOIN documents ON (documents_has_folders.DOCUMENTS_IDDOCUMENTS=documents.IDDOCUMENTS AND documents.remove_date IS NULL ) LEFT JOIN files ON (documents.IDDOCUMENTS=files.DOCUMENTS_IDDOCUMENTS AND documents.remove_date IS NULL AND files.remove_date IS NULL ) WHERE folders.remove_date IS NULL AND documents.remove_date IS NULL AND files.remove_date IS NULL GROUP BY folders.IDFOLDERS] [wrapped: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN folders ON (documents_has_folders.FOLDERS_IDFOLDERS=folders.IDFOLDERS ' at line 1]

这不是自Propel 1.6(可能更早)以来构建查询的推进方式。我们不使用标准或同级类。以下查询:

SELECT 
folders.NAME,
COUNT(documents.NAME),
COUNT(files.idfiles),
SUM(files.size)

FROM  `folders`
LEFT JOIN `documents_has_folders` ON (documents_has_folders.folders_idfolders = folders.idfolders)
LEFT JOIN documents ON (documents_has_folders.DOCUMENTS_IDDOCUMENTS=documents.IDDOCUMENTS) 
LEFT JOIN files ON (documents.IDDOCUMENTS=files.DOCUMENTS_IDDOCUMENTS) 
可以这样写:

$query = FoldersQuery::create())
    ->joinDocuments('documents')
    ->joinFiles('files')
    ->withColumn('COUNT(documents.NAME)', 'CountName')
    ->withColumn('COUNT(files.IDFILES)', 'CountIdFiles')
    ->withColumn('SUM(files.size)', 'Sum')
    ->select(array('Name', 'CountName', 'CountIdFiles', 'Sum'))
    ;

它可能需要调整,但这是正确的方法。

如果执行非常简单的查询,例如
$x=FoldersQuery::create()->limit(10)->find(),FROM子句是否为空?如果我执行$x=FoldersQuery::create()->limit(10)->find(),它将返回正确的数据,并且查询是正确的;你给我的问题不起作用。。。从表1到表2,从表2到表3,我有很多关系。如何连接这4个表?@user783029-“不工作”不足以描述您遇到的问题。正如William所说,这可能需要调整——如果你尝试做一些调整,对学习过程会更好。如果这不起作用,请告诉我们您遇到了什么错误,或者期望和输出之间有什么不同:)不使用Porpel 1.6中创建查询的新方法是否可能实现功能?我使用旧的标准类型查询大量加载了旧代码,坦率地说,有些代码正在工作,有些则没有。我打赌这是代码库中的一个bug。