0

Indexと呼ばれるプロパティ_fletter(この場合はプライベートプロパティ)を持つオブジェクトがあります。

次のクエリを使用して、テーブルからすべての個別の値をフェッチする SQL クエリがあります。

SELECT DISTINCT fletter FROM books ORDER BY fletter ASC

このクエリを呼び出す方法は、データベースに関連するすべての処理を行い、変数を返すプライベート関数を使用することです。

function getFirstLetter() {
    // Database stuff omitted
    $stmt->execute();
    $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $res;
}

プロパティに結果を与える方法_fletterは次のとおりです。

$this->_fletter = $this->getFirstLetter();

最終的に何が起こるかというと、 のプロパティは$this->_fletter連想配列であり、次のようになりprint_rます。

[0] => Array
    (
        [fletter] => A
    )
    // etc.

次に、xが問題の文字に対応するforeachすべての場所を反復するステートメントを使用し、次のSQLステートメントを実行します_fletter[x]

SELECT booktitle, isbn, pages FROM books WHERE booktitle = ':booktitle'

次に、前の例のように結果を返します。

$this->_fletter = $this->getBookTitles();

そして、アイデアは、新しい関連配列の結果を_fletter、最初の文字が新しい結果セットに対応する配列に追加することです。次のようなものです。

[0] => Array
    (
        [fletter] => [A]
            (
                [1] => 'A time to kill'
                [2] => 'Almost Famous'
            )
    ) //etc - note I may not have written the syntax correct

そのため、新しいクエリは「_fletter」の値を取得し、クエリを実行して、最初の文字と同じ場所または同じ配列エントリの下に結果を返す必要があります。だから私はフレッターを新しい結果配列の新しいキーまたはその他のものにしたい

新しい結果を単に_fletter配列に追加すると、既存の配列に追加されるだけで、値は使用されず[fletter]、配列に新しいエントリが追加されます。

[15] => Array
        (
            [fletter] => W
        )

    [A] => Array
        (
            [0] => Array
                (
                    [booktitle] => A Time to kill
                    [isbn] => 1234567890
                )

Any ideas how this can be achieved? I want to avoid placing the php in the html portion of the page, however, if there is no alternative, I might have to do that.

4

1 に答える 1

1

自分が何を望んでいるのかを理解するのは本当に難しい。1つのforeachで1つのクエリだけが必要だと思います

SELECT fletter, booktitle, isbn, pages FROM books

<?php
$fletters = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $index = $row['fletter'];
    unset($row['fletter']);
    $fletters[$index][] = $row;
}
于 2013-04-05T11:52:06.850 に答える