2

ここで質問を作成しましたが、少し肥大化していると思います。この質問をすくい取るために、ここに私の要件があります:

情報を HTML テーブルの 1 つにフォーマットできるように、その行のすべての情報を取得する 3 つの mySQL クエリを作成する必要があります。

すべてを選択するクエリは次のとおりです。

$qry_questions = mysql_query("SELECT * FROM mbr_qa_questions ORDER BY q_votes DESC);
while($row = mysql_fetch_array($qry_questions){
    //Grab all information
}

ここで、上記のように機能する 3 つのクエリを作成する必要がありますが、次のようなことを行う必要があります。

pull everything from every third row in a table starting at row #1
pull everything from every third row in a table starting at row #2
pull everything from every third row in a table starting at row #3

次に、これらの各クエリを 3 つの列のいずれかに入れます。

ユニークIDではできません。はい、自動インクリメント ID ですが、行全体を別のテーブルに移動する必要がある可能性があります。

編集:各行をカウントし、クエリされた結果を正しい「ビン」に配置する試みを追加しました

//GIVE EACH ENTRY A COLUMN NUMBER
$count++;
if($count >= 4){
    $count = 1; 
}?> 

<div class="col" id="col-1">
    <?PHP
    while($count == 1){
        include("pieces/answers/newAnswerLayout.php"); 
    }
    ?>
</div>
<div class="col" id="col-2">
    <?PHP
    while($count == 2){
        include("pieces/answers/newAnswerLayout.php"); 
    }
    ?>
</div>
<div class="col" id="col-3">
    <?PHP
    while($count == 3){
        include("pieces/answers/newAnswerLayout.php"); 
    }
    ?>
</div>
4

3 に答える 3

4

MySQL から返される結果セットを取得するための 1 つの方法を次に示します。(ただし、すべての行を返し、アプリ内で 3 行おきに取得する方が簡単な場合があります)。しかし、MySQL では非常に簡単に実行できます。元のクエリは、エイリアスとして (インライン ビューとして) 括弧で囲まれていることに注意してくださいr

SELECT r.*
  FROM ( 
         SELECT *
           FROM mbr_qa_questions
          ORDER BY q_votes DESC
       ) r
 CROSS
  JOIN ( SELECT @i := 0 ) s
HAVING ( @i := @i + 1) MOD 3 = 1

これは、最初の行から始めて、3 行ごとに返されます。2 行目と 3 行目から 3 行おきに取得するに= 1は、HAVING 句のリテラルを= 2orに置き換え= 3ます (それぞれ)。

于 2012-12-18T23:08:08.070 に答える
2

なぜ 3 つの異なるクエリが必要なのですか? 代わりに、あなたが持っている単一のクエリを保持し、ループの反復ごとにインクリメントされるカウンターを持ち、%3 でケース #1、#2、または #3 に対して行うことは何でもできませんか?

于 2012-12-18T22:58:04.217 に答える
0

おそらくカウンターを使用して、はるかに簡単な方法でそれを行うことができますが、私は次のようにします:

$questions = array();
$results = mysql_query("SELECT * FROM mbr_qa_questions ORDER BY q_votes DESC");

while($row = mysql_fetch_array($results)){
    $questions[] = $row;
}

for($i = 0; $i < count($questions); $i++) {
  if($i + 1 % 3 == 0) {
     $questions[$i];//this is a 3rd, so do something with it
  }
}
于 2012-12-18T23:06:43.017 に答える