5

私は連想選択に自己説明的な名前を使用するのが好きで、重複を避けるために必須であることさえあるため、AS キーワードを頻繁に使用します。しかし、左結合で問題が発生しています。

これは機能します:

$sql = "SELECT *,
        projects.id as projects_id
       FROM projects";

$sql .= " LEFT JOIN".
    " (SELECT 
        projectfiles.id as projectfiles_id,
        projectfiles.fileID as projectfiles_fileID,
        projectfiles.projectID as projectfiles_projectID
       FROM projectfiles
       ) AS projectfiles".
    " ON projects.id = projectfiles_projectID";

projectsただし、必要のないフィールドuserIDとも取得するため、からの役に立たないデータになってしまいnameます。また、IDを2回取得しています。

だから私はそれを変更しようとしました;

$sql = "SELECT 
        projects.id as projects_id
       FROM projects";

ONラインになってから

" ON projects_id = projectfiles_projectID";

しかし、それはエラーを与えましたUnknown column projects_id

だから私は試しました

" ON projects.projects_id = projectfiles_projectID";

しかし、それでも同じエラー

その後、実験を開始し、(テストとして)試しました

$sql = "SELECT id,name,userID FROM projects";

$sql .= " LEFT JOIN".
    " (SELECT 
        projectfiles.id as projectfiles_id,
        projectfiles.fileID as projectfiles_fileID,
        projectfiles.projectID as projectfiles_projectID
       FROM projectfiles
       ) AS projectfiles".
    " ON projects.id = projectfiles_projectID";

そして驚いたことに、LEFT JOIN は何も拾っていないように見えました。

コード:

$sql = "SELECT id,name,userID FROM projects";

$sql .= " LEFT JOIN".
    " (SELECT 
        projectfiles.id as projectfiles_id,
        projectfiles.fileID as projectfiles_fileID,
        projectfiles.projectID as projectfiles_projectID
       FROM projectfiles
       ) AS projectfiles".
    " ON projects.id = projectfiles_projectID";

$res = mysql_query($sql);
if(!$res) die(mysql_error());

if(mysql_num_rows($res) > 0)
{
    $rownum = 0;
    while($row = mysql_fetch_assoc($res))
    {
        print_r($row);
        echo "<br/><br/>";
    $rownum++;
    }
}

出力:

問題

projectsそのprojectIDで1行しかないのに3行しかないので、これは奇妙projectfilesです...私は何が間違っていますか?

4

5 に答える 5

1

クエリの短い形式を使用します。

$sql = "SELECT projects.id,projects.name,projects.userID FROM projects LEFT JOIN
       projectfiles ON projects.id = projectfiles.projectID";
于 2012-06-08T09:02:29.707 に答える
1

projectfilesテーブルからのみ選択するには:

$sql = "SELECT projectfiles.*,
        projects.id as projects_id
       FROM projects";

// rest of the code is the same

アップデート

$sql = "SELECT projectfiles.* FROM projects";
// rest of the code is the same
于 2012-06-08T09:16:07.597 に答える
1
SELECT p.*, pf.id, pf.fileId
FROM projects p LEFT JOIN projectfiles pf 
on p.id = pf.projectID

「as」を使用して、そのときのようにすることができます。副選択は必要ありません。

于 2012-06-08T09:03:14.100 に答える
0
$sql = "SELECT p.id,p.name,p.userID FROM projects p";

$sql .= " LEFT JOIN".
    " projectfiles pf ".
    " ON p.id = p.projectID";
于 2012-06-08T09:05:23.777 に答える
0
$sql = "SELECT prj.id as prjId,
    prj.name as prjName,
    prj.userID as prjUid,
    pf.id as pfId, 
    pf.fileID as pfFileId, 
    pf.projectID as pfProjecId 
FROM projects as prj 
LEFT JOIN projectfiles AS pf 
ON prj.id = pf.projectID";
于 2012-06-08T09:30:09.927 に答える