0

これが2番目のSQLクエリなしで可能かどうかはわかりませんが、最初に質問するのがよいと思いました。

GROUPBY句を使用したSQLクエリがあります。結果を表示するforeachループ内に、各条件の見出しを挿入します。1つのクエリだけで実行することは可能ですか?

すなわち。

タップルーム以外のみ

DATA
DATA
DATA

タップルームのみ

DATA
DATA
DATA

SQLコード:

SELECT 
      `Keg`.`content_type_id`, `Keg`.`is_taproom_only`, count(content_type_id), `ContentType`.`id`, `ContentType`.`name`     
FROM 
      `kegdb`.`kegs` AS `Keg` 
LEFT JOIN
      `kegdb`.`content_types` AS `ContentType` 
      ON (`Keg`.`content_type_id` = `ContentType`.`id`) 
WHERE 
       `status_type_id` = 6     
GROUP BY 
      is_taproom_only, content_type_id 
ORDER BY 
      `is_taproom_only` ASC, `ContentType`.`name` ASC
4

1 に答える 1

1

したがって、データが次のようになると仮定します。

is_taproom_only, content_type_id, content_type_name
-----------------------
NonTaproom, content_type_id, content_type_name
NonTaproom, content_type_id, content_type_name
NonTaproom, content_type_id, content_type_name
TaproomOnly, content_type_id, content_type_name
TaproomOnly, content_type_id, content_type_name
TaproomOnly, content_type_id, content_type_name

(air4xが上記のコメントで述べたように)変数を使用して見出しを保存し、結果をループしながら、以前に保存された見出しと異なる場合にのみ見出しを印刷できます。

注:このアプローチは、結果が見出しの値で並べ替えられている場合にのみ機能します(これは私が見ることができます)。

PHPコードは次のようになります。

$is_taproom_only = '';

foreach $rows as $row {

    echo ($is_taproom_only <> $row['is_taproom_only']) ? $row['is_taproom_only'] : ''; //only print if they're different
    $is_taproom_only = $row['is_taproom_only']; //store for the next iteration

    //print other data
    echo $row['content_type_id'];
    echo $row['content_type_name'];

}
于 2012-10-10T10:16:35.603 に答える