2012-03-30 5 views
1

私はダッシュボードの種類(空白を使用するため)が必要なオンラインアプリケーションがあります。mysql:グループ結果を制限し、1つのクエリで他のテーブルに結合します。

操作に使用される3つのテーブルがあります:私は(サムネイル画像と、私はentryimagesテーブルとカテゴリのテーブルに参加する必要が)4-5エントリを表示するダッシュボード上の

1.) categories: id, name 
2.) entries: id, name, description, category_id, created, modified 
3.) entryimages: id, filename, description, entry_id 

については、各カテゴリ。

私はこのような(ようにとスレッド)いくつかの記事を読む: http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

しかし、まだ右のそれを取得していないです、私は最初の抽出物にすべてのカテゴリを試してみましたが、それぞれ、すべてのカテゴリ用にビルドしましたクエリと "すべてのユニオン"と1つを添付して、それは動作していません。 私が使用したコードの最後のバージョン:

foreach($categories as $id => $name) 
{ 
    $query .= "SELECT `entry`.`id`, 
      `entry`.`name`, 
      `entry`.`description`, 
      `entry`.`category_id`, 
      `entry`.`created`, 
      `entry`.`modified`, 
      `entryimages`.`filename`, 
      `entryimages`.`description` 
      FROM `entries` as `entry` LEFT JOIN `entryimages` ON `entryimages`.`entry_id` = `entry`.`id` 
WHERE `entry`.`category_id` = $id "; 

      if($i < count($groups)) 
      { 
       $query .= 'UNION ALL '; 
      } 

      $i++; 
     } 

     $result = mysql_query($query); 

誰もがこのような動作を実現するための最良の権利が何であるかを知っていますか?

おかげで1000年

答えて

1

を取得するには、ORDER BY句ようにあなただけのLIMIT句を追加する必要があります3つのエントリーを表示したい場合、あなたのやり方は間違っています。私の理解が正しければ、クエリ全体がよく私は5つのランダムなものを得るために)(RANDを使用して注文するための

"SELECT `entry`.`id`, 
     `entry`.`name`, 
     `entry`.`description`, 
     `entry`.`category_id`, 
     `entry`.`created`, 
     `entry`.`modified`, 
     `entryimages`.`filename`, 
     `entryimages`.`description` 
    FROM `entries` as `entry` 
    INNER JOIN categories 
     ON (entry.category_id = categories.id) 
    LEFT JOIN (SELECT * FROM `entryimages` WHERE `entry_id` = `entry`.`id` LIMIT 1) AS `entryimages` 
     ON `entryimages`.`entry_id` =`entry`.`id`  
    ORDER BY `entry`.`created` DESC LIMIT 5"; 
+0

おかげで、のようなものになります! =) –

1

あなたのコードは、私にはOKに見えますが、わずか5それらのを取得し、ダッシュボードには、最新の

$query .= "SELECT `entry`.`id`, 
     `entry`.`name`, 
     `entry`.`description`, 
     `entry`.`category_id`, 
     `entry`.`created`, 
     `entry`.`modified`, 
     `entryimages`.`filename`, 
     `entryimages`.`description` 
     FROM `entries` as `entry` LEFT JOIN `entryimages` ON `entryimages`.`entry_id` =   `entry`.`id`  
WHERE `entry`.`category_id` = $id ORDER BY `entry`.`created` DESC LIMIT 5"; 
+0

おかげ.. =)それをやった –

関連する問題