从两个表中选择数据到两个数组

时间:2013-10-14 11:37:48

标签: php mysql

我有两张桌子:文章和图片。 每篇文章都有5个链接图像。 我需要选择所有文章和所有图像,在一个查询中按文章ID分组。

获取文章的简单查询:

SELECT * FROM articles WHERE Del=0 AND Tip=10

获取该文章的所有图像

SELECT * FROM images WHERE UID=articles.UID AND Tiket=articles.P_Num AND Del=0

通过User_ID(UID)和User_Post_Number(P_Num)与图像链接的文章 P_Num - 不是唯一的!这不是文章ID。 UID + P_Num =唯一。

我需要得到的内容 - 每篇文章的字段=图像数组的文章数组。

通过

显示带有图片的文章
foreach(Articles)
{
     show_article_content; 
     for(article[images_count])
     {
        show_image;
     }
}

3 个答案:

答案 0 :(得分:1)

//QUERY
$q = "SELECT * FROM Articles JOIN Images on Articles.article_id = Images.articles_article_id";

$result = mysql_query($sql);

$article_id = 0;//article id being proccessed

while ($row = mysql_fetch_assoc($result))
{
    /*
     * example: article with id 1 --> 5 images
     *          article with id 2 --> 5 images
     * this code prints the article once with its first image
     * then on each loop prints only the image till its 4th image
     * then reassigns the $article_id to the new article id. 
     */
    if($article_id != $row['article_id'])//if its the first time to print the article
    {
        $article_id = $row['article_id'];
        /*
         * SHOW OTHER STUFF RELATED TO THE ARTICLE
         */
        echo $row['image'];//show the first image related to this article here
    }
    else
    {
        echo $row['image'];//show other 4 images here
    }
}

答案 1 :(得分:0)

我建议这样的事情:

SELECT * FROM articles 
JOIN images on articles.ID = images.articleId 
ORDER BY articles.ID;

然后使用foreach或while循环来构建数组。

例如:

foreach ($dbData as $row){
    $output[$row.ID][] = $row['image'];
}

您没有提供您的代码,因此这只是一个建议。

答案 2 :(得分:0)

太晚了,但我喜欢和你一起使用PDO分享这个,因为我已经在PHP5.5中测试了:

//
$database = "mydatabase";
$host = "localhost";
$user = "my-mysql-username";
$pass = "mypassword";
//
// PDO
//
try
{
  $pdo = new PDO("mysql:host=$host;dbname=$database", $user, $pass);
}
catch (PDOException $e)
{
  echo $e->getMessage();
  exit;
}
//
$strSQL = "SELECT articles.UID,articles.title,articles.content,images.imageurl
  FROM articles 
  INNER JOIN images ON articles.UID=images.UID AND images.Tiket=articles.P_Num
  WHERE articles.Del=0 AND articles.Tip=10
  ORDER BY articles.UID,images.UID;";
//
$rst = $pdo->prepare($strSQL);
$rst->execute();
//
// initialize previous ID:
// $i: counter
// $id0: previous ID
// $id: current ID
//
$id0 = -1;
//
while($row = $rst->fetch())
{
  $id = $row["UID"];
  //
  // print once the article content or title:
  //
  if($id != $id0)
  {
    //
    // close open the previous div if existent:
    //
    if($id0 != -1)
    {
      echo "</div>";
    }
    //
    // open new div:
    //
    echo "<div>" . $row["content"];
    $id0 = $id;
  }
  //
  // show all images linked to the article:
  //
  echo "<img src=\"" . $row["imageurl"] . "\" />";
  //
}
//
// close last open div:
//
if($id0 != -1)
{
  echo "</div>";
}
//
$rst->closeCursor();

希望这有帮助。