web-dev-qa-db-ja.com

データベースの結果を2つの列に分離する方法は?

奇数の偶数の方法の例を見ましたが、アルファベット順の項目ごとに左から右に交互に並べずに、列全体から次の列に順序を流したいです。これはできますか?

これがクエリです

$db = JFactory::getDbo();
$db->setQuery('SELECT title, introtext 
               FROM #__content
               WHERE introtext LIKE "%Still Airing%"
               ORDER BY title ASC');
$row = $db->loadAssocList();

2で割ってみましたが、どのように各列をhtmlに表示させるのですか?

$half = count($row) / 2;

私が考えていたのは、変数を使用して各列(またはテーブルのtds)にその数のアイテムをリストすることができるということですが、構文がわからないか、正しく実行しているかどうかはわかりません。 $ halfアイテムをリストし、残りを次の列にリストします。

イントロテキストは単なるフィルターです。タイトルのみを表示します。

3
Mythic

array_chunk() を使用して行数を半分に切り上げた後、切り上げて、2番目の列の行数が最初の列の行数と同じかそれより1つ少なくなるようにします。

HTMLテーブルは、「表形式」のデータを表示するためにのみ使用してください。 2つの非表形式リストを作成しているので、他のタグを使用する方が適切です(いくつかの異なるタグが適切な場合があります)。

デモ(リッチテキストの結果を確認するには、スニペットをphptester.netにコピーして貼り付けてください)

_// $resultset = $db->loadAssocList();  ...I am supplying my own sample data
$resultset = [
    ['title' => 'A', 'introtext' => 'A intro'],
    ['title' => 'B', 'introtext' => 'B intro'],
    ['title' => 'C', 'introtext' => 'C intro'],
    ['title' => 'D', 'introtext' => 'D intro'],
    ['title' => 'E', 'introtext' => 'E intro']
];

$halves = array_chunk($resultset, ceil(count($resultset) / 2));

foreach ($halves as $half) {
    echo '<div style="display: inline-block; vertical-align: top; border: solid 1px black; padding: 2px;">';
        foreach ($half as $row) {
            echo '<div style="border: 1px solid blue; padding: 2px;">';
                echo '<p style="background-color: green;">' , $row['title'] , '</p>';
                echo '<p style="background-color: yellow;">' , $row['introtext'] , '</p>';
            echo '</div>';
        }
    echo '</div>';
}
_

出力:

enter image description here


コメントを少しやり取りした後、titleの値のみを目的の配置で2つの列として出力する直接的な方法を次に示します。

_$db = JFactory::getDbo();
$query = $db->getQuery(true)
            ->select("title")
            ->from("#__content")
            ->where("introtext LIKE '%Still Airing%'")
            ->order("title");
// echo $query->dump();  // uncomment if you want to see the rendered query
$db->setQuery($query);
$resultset = $db->loadColumn();

$halves = array_chunk($resultset, ceil(count($resultset) / 2));

foreach ($halves as $half) {
    echo '<div style="display: inline-block; vertical-align: top; border: solid 1px black; padding: 2px;">';
        echo '<div>' , implode('</div><div>', $half) , '</div>';
    echo '</div>';
}
_

Joomlaのクエリ構築メソッドを使用すると、$query->dump()を出力して問題を診断するのが簡単になります。

4
mickmackusa