0

私は次のSQLを持っています:

$queryString = "
            SELECT     
                iR.lastModified,
                d.*,
                c2.title as stakeholderTitle,
                u.username as authorUsername,
                c.title as authorContactName,  
                GROUP_CONCAT(iR.stakeholderRef) AS participants
            FROM
                informationRelationships iR,
                contacts c2
            INNER JOIN
                debriefs d ON
                d.id = iR.linkId 
            LEFT JOIN
                users u ON
                u.id = iR.author      
            LEFT JOIN
                contacts c ON
                c.ref = u.contactId
            LEFT JOIN 
                debriefs d2 ON
                d2.stakeholder = c2.ref                
            WHERE               
                ( 
                    iR.clientRef = '$clientRef' OR  
                    iR.contactRef = '$contactRef'   
                )
                AND    
                    iR.projectRef = '$projectRef' AND
                    iR.type = 'Debrief' 
            GROUP BY
                iR.linkId
            ORDER BY
                d.dateOfEngagement                    
        ";     

連絡先テーブルに 2 つの異なるビットのデータが必要であることに注意してください。

だからある時点で、私は一致する必要があります

c.ref = u.contactId 

これにより、1ビットの情報が返されます

しかし、まったく別のグループ化も必要です。

d2.stakeholder = c2.ref

問題は、タイトルが両方に興味のある列であることです:

c2.title as stakeholderTitle,
...
c.title as authorContactName

どうすればこれを行うことができますか?

私の現在の試みは戻ってきています:

Error: Unknown column 'iR.linkId' in 'on clause'

ここに画像の説明を入力

ここで何が起こっているのか本当に理解しているかどうかはわかりません:

mysql と php の共通属性で 2 つのテーブルを結合する方法は?

編集::::---回答済み--zerkms

    $queryString = "
        SELECT     
            iR.lastModified,
            d.*,
            c2.title as stakeholderTitle,
            u.username as authorUsername,
            c.title as authorContactName,  
            GROUP_CONCAT(iR.stakeholderRef) AS participants
        FROM
            informationRelationships iR            
        INNER JOIN
            debriefs d ON
            d.id = iR.linkId  
        INNER JOIN 
            contacts c2 ON
            d.stakeholder = c2.ref  
        LEFT JOIN
            users u ON
            u.id = iR.author      
        LEFT JOIN
            contacts c ON
            c.ref = u.contactId             
        WHERE               
            ( 
                iR.clientRef = '$clientRef' OR  
                iR.contactRef = '$contactRef'   
            )
            AND    
                iR.projectRef = '$projectRef' AND
                iR.type = 'Debrief' 
        GROUP BY
            iR.linkId
        ORDER BY
            d.dateOfEngagement                    
    ";     

クエリの順序を変更することで、両方の列を取得することができました... zerkms に感謝します!

4

2 に答える 2

0

mysql の 1 つのクエリで暗黙的な結合と明示的な結合を混在させることはできません。

そう

FROM informationRelationships iR,
     contacts c2

に書き換える必要があります

FROM informationRelationships iR
INNER JOIN contacts c2 ON ...
于 2013-06-24T10:45:33.860 に答える
0

同じクエリ (サブクエリではない) でデカルト積と結合を使用しないでください。ここでは、結合のみを使用します (CROSS JOIN はデカルト積と同じです)。

于 2013-06-24T10:49:08.323 に答える