0

header.php に次のループがあるとします。

<div id="top-20">
    <h2 class="top-20-title">TOP 20 TEAMS</h2>

    <div class="top-20-content">

        <?php
            $params = array(
               'limit'   => -1 // get everything
            );

            $matches = pods( 'matches', $params );

            if ( 0 < $matches->total() ) {
                while ( $matches->fetch() ) {
            ?>

                 <?php echo $matches->field( 'winner_team' ); ?>
                 <br>

            <?php
                    } // end of while loop
                } // end of if any exists
            ?>

    </div><!-- /top-20-content -->  
</div><!-- /top-20 -->  

そして、これは私の単純化された表がどのように見えるかです:

id | team_1 | team_2 | winner_team
--------------------------------
1  | 3      | 15     | 3
--------------------------------
2  | 20     | 8      | 8
--------------------------------
3  | 18     | 11     | 18
--------------------------------
4  | 8      | 7      | 8
--------------------------------
...

しかし、whileループの中でエコーする代わりに

<?php echo $matches->field( 'winner_team' ); ?>

id_newWinner_team_newのような 2 つの列を含む新しい配列、つまり$matches_arrayを作成し、 winner_teamの値をwhile ループ内で直接エコーする代わりに、winner_team_new に保存します。

次に、この新しく作成された配列 $matches_array を別の while ループ内でループしたいと思います。

だから、私はこのようなものを得るでしょう:

8
3
18

while ループでエコーを使用するときに現在取得しているものの代わりに:

3
8
18
8

なぜ私はSQL内でそれを行うことができないのですか? このバグのため、$params または sql 配列の条件を使用しない別の配列を使用して完了する必要があります: https://github.com/pods-framework/pods/issues/595と、ポッド フレームワークが複雑すぎるという事実独自のコード調整をコアにするため、while ループから作成される配列を使用してこれをバイパスしたいと考えています。

したがって、必要なのは、配列を作成し、winner_team の出現回数に基づいて結果を再配置することです。

使ってみました

$matches_array = array_count_values(array_map($matches,array_keys($new_row)));

そしてwhileループでループしますが、まったく機能していません。

部分ごとのカウント配列/グループについて助けが必要です。

私はそれについてほとんど何も知りません。

同じWinner_teamフィールドに基づいてグループ化した後、新しいフィールドを作成する必要があると思います。たとえば、すべてのチーム (winner_team に基づく) 値の出現回数が格納される場所にwinsを作成します。そして、その新しい配列 DESC を注文します。

ところで。テーブル内のすべての列は INTEGERS です

編集 2: $matches_array という新しい配列内に while ループからの値を格納する方法を見つけました。コードは次のようになります。

<div id="top-20">
    <h2 class="top-20-title">TOP 20 TEAMS</h2>

    <div class="top-20-content">

        <?php
            $params = array(
               'limit'   => -1 // get everything
            );

            $matches = pods( 'matches', $params );

            if ( 0 < $matches->total() ) {
                while ( $matches->fetch() ) {
            ?>

                 <?php // echo $matches->field( 'winner_team' ); ?>
                      <?php $row_array = $matches->field( 'winner_team' ); ?>
                      <?php $matches_array[]; ?>

                 <br>

            <?php
                    } // end of while loop
                } // end of if any exists
            ?>

    </div><!-- /top-20-content -->  
</div><!-- /top-20 -->

ここで、groupby (winner_team フィールドの数字の発生に基づく) の後に foreach ループを実行し、出力 DESC の前に結果を並べ替える必要があります。

それを行う方法について何かアドバイスはありますか?

4

1 に答える 1

2

エイリアス化された列で並べ替えることができなかった最初の問題は解決されているはずです。私は最初のシナリオでそれをテストしましたが、まさにそれがすべきことをしています。この試行された回避策を喜んで破棄できると思います。

于 2012-10-12T05:15:06.357 に答える