0

クエリが結果をもたらすかどうかを確認したい。今のところ、クエリの行数を作成します。行数が > 0 の場合、クエリのすべての結果を取得する新しいクエリを再度作成します。az からの範囲でアルファベット順のクエリ ループ (つまりWHERE name LIKE "a%") を作成すると、タスクを完了するのに 52 のクエリが発生します。この種のタスクにどのように直面しますか? その結果、アルファベット順にリンクされたメニューをレンダリングしたいと思います。

A
----
Apple Link
Annanas Link

B
----
Banana Link

etc.

おそらく、1 つのクエリでそれを行い、文字ごとに新しい紹介メニューポイントをレンダリングする必要があるため、何らかの方法で結果をアルファベット順に爆発させる別の方法があります。私のパフォーマンスをチューンアップするための有用な指針があれば幸いです

4

1 に答える 1

2

一度にすべてを選択して、列で並べ替えることはできませんか?

SELECT * FROM your_table ORDER BY column_name ASC

次に、行がある場合はループし、最初の文字を比較して、現在の文字を判断できます。

$stmt->execute();
if ($stmt->rowCount()) {
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $value = $row['column_name'];
        $first_letter = $value[0];
    }       
}

最初の文字を取得したら、その値で好きなことを行うことができます

この回答を拡張するには、次のようなものを使用して、ヘッダーで値をエコーアウトできます。

// initialize this variable
$current_letter = '';

// if you get results
if ($stmt->rowCount()) {
    // loop through each row
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        // when you loop, get the value
        $value = $row['column_name'];
        // if the value does not have the current letter you are on:
        if ($current_letter != $value[0]) {
            // echo a header for the new letter
            echo "<h2>" . $value[0] . "</h2>";
            // set the new letter to the current letter
            $current_letter = $value[0];
            // echo the actual value
            echo $value . "<br />";
        } else {
            // the value falls under our current letter, echo it
            echo $value . "<br />";
        }
    }
}
于 2013-01-16T00:27:47.977 に答える