-1

DBには2つの別個のテーブルがあり、ここでは関連するフィールドがあります。

テーブル画像:

CREATE TABLE `images` (
  `image_id` int(4) NOT NULL AUTO_INCREMENT,
  `project_id` int(4) NOT NULL,
  `user_id` int(4) NOT NULL,
  `image_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `image_description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `date_created` date NOT NULL,
  `link_to_file` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `link_to_thumbnail` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `given_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `note` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`image_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=51 ;

およびテーブルプロジェクト:

CREATE TABLE `projects` (
  `project_id` int(4) NOT NULL AUTO_INCREMENT,
  `user_id` int(4) NOT NULL,
  `project_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `project_description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `date_created` date NOT NULL,
  `date_last_edited` date NOT NULL,
  `shared` int(1) NOT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`project_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=25 ;

各プロジェクトの最も古い画像のギャラリーをそのプロジェクトページへのリンクとして変数$contentに表示したいのですが、mysqlクエリをどのように構築する必要があるのか​​わかりません。これを手伝ってくれませんか。私はいくつかのifおよびwhileステートメントを試しましたが、結果は完全な失敗であり、私は(非常に限られた)知識の終わりにいます。窓から飛び出そうとしています...

だから私は

<a href="index.php?page=projects&id='.$projectid.'">
  <img src="oldest_photo_of_project_x" />
</a>
<a href="index.php?page=projects&id='.$projectid.'">
  <img src="oldest_photo_of_project_y" />
</a>
<a href="index.php?page=projects&id='.$projectid.'">
  <img src="oldest_photo_of_project_z" />
</a>

Update1:

明確にするために、私は組み合わせようとしています:

"SELECT * FROM projects WHERE user_id='$UserID' ORDER BY project_id DESC"

そして多分このようなもの:

$query = "SELECT images.project_id, projects.project_name ". 
"FROM images, projects ".
"WHERE images.project_id = projects.project_id";
4

3 に答える 3

1

このようなものは、データベースから画像のデータを抽出します。

SELECT * FROM `images` WHERE `project_id`="x" ORDER BY `date_created` ASC LIMIT 1,1;

これにより、ID'x'のプロジェクトの最も古い画像が抽出されます。次のようにそれらを連鎖させることができます。

SELECT * FROM `images` WHERE `project_id`="x" ORDER BY `date_created` ASC LIMIT 1,1;
SELECT * FROM `images` WHERE `project_id`="y" ORDER BY `date_created` ASC LIMIT 1,1;
SELECT * FROM `images` WHERE `project_id`="z" ORDER BY `date_created` ASC LIMIT 1,1;

PHPを使用している場合は、mysqli_result :: fetch_arrayを使用して、3つのクエリすべての結果を含む結果を取得できます。

于 2012-05-26T08:53:41.047 に答える
1

エラーのテストは行っていませんが、次のようにします。

$result = mysql_query("SELECT DISTINCT 
    `projects`.`project_id` AS `project`, 
    `images`.`link_to_file` AS `filepath`
FROM 
    `projects`,
    `images`
WHERE 
    `projects`.`project_id` = `images`.`project_id`
ORDER BY 
    `images`.`date_created` DESC");

while ($resultLoop = mysql_fetch_array($result)) {
    $str .= '<a href="index.php?page=projects&id=' . $resultLoop["project"] . '">
        <img src="' . $resultLoop["filepath"] . '" />
    </a>';
}


echo $str;
于 2012-05-26T09:00:28.430 に答える
0
$dbh = new PDO($DSN, $USERNAME, $PASSWORD);
$qry = $dbh->prepare('
  SELECT   project_id, link_to_thumbnail
  FROM     images NATURAL JOIN (
    SELECT   project_id, MIN(date_created) AS date_created
    FROM     images
    GROUP BY project_id
    WHERE    user_id = ?
  ) AS t
  ORDER BY project_id DESC
');
$qry->bindValue(1, $UserID);
$qry->execute();

while ($row = $qry->fetch()) echo "
  <a href=\"index.php?page=projects&id=$row[project_id]\">
    <img src=\"$row[link_to_thumbnail]\"/>
  </a>
";
于 2012-05-26T09:02:52.273 に答える