0

現在、私はこのようなMySQLクエリを実行しています

$query = "
        SELECT 
        t1.id AS 'post_id',
        t1.post_title AS 'post_title',
        t1.post_status AS 'post_status',
        COUNT( t1.id ) AS 'row_count', //this one is not working
        COUNT( t2.tag_id ) AS 'link_count',
        GROUP_CONCAT( t2.tag_id) AS 'link_id',
        GROUP_CONCAT( t2.url) AS 'url',
        GROUP_CONCAT( t2.title) AS 'title',
        GROUP_CONCAT( t2.active) AS 'active',
        FROM $posts_table AS t1
        JOIN $tags_table AS t2 ON ( t1.id = t2.post_id )
        GROUP BY t1.id
        ORDER BY t1.id DESC
        LIMIT $start_from, $row_to_show;
    ";

このクエリのすべての部分は、COUNT( t1.id ) AS 'row_count',行を除いて正常に実行されています。

t1テーブルで見つかった行の総数をカウントしたいのですが、配列をダンプしているとき

$result = $wpdb->get_results($query);
var_dump($result->row_count);

それは私に与えていますNULL

ループ内で使用する場合

foreach ( $result as $result ){
    echo $result->row_count;
}

link_count次に、その値は、次の行で宣言されている値と同じで、COUNT( t2.link_id ) AS 'link_count',必要な値を示します。

このクエリでページ付け(30件の結果のうち10件など)を使用する方法について教えてください。

4

3 に答える 3

0

GROUPBYに問題があると思います。

このクエリを試してください:

$query = "
        SELECT 
        t1.id AS 'post_id',
        t1.post_title AS 'post_title',
        t1.post_status AS 'post_status',
        COUNT( t1.id ) AS 'row_count', 
        COUNT( t2.tag_id ) AS 'link_count',
        GROUP_CONCAT( t2.tag_id) AS 'link_id',
        GROUP_CONCAT( t2.url) AS 'url',
        GROUP_CONCAT( t2.title) AS 'title',
        GROUP_CONCAT( t2.active) AS 'active',
        FROM $posts_table AS t1, $tags_table AS t2 
        GROUP BY t1.id 
        HAVING t1.id = t2.post_id 
        ORDER BY t1.id DESC
        LIMIT $start_from, $row_to_show;
    ";
于 2012-06-29T07:24:43.847 に答える
0

のようなクエリCOUNT( DISTINCT X ) .. GROUP BY Xは常に値1になり、DISTINCTをスキップすると、結合された結合の数が取得されます。

mysqlでカウントを取得する方法はありますが、phpで使用mysql_num_rows()する方がはるかに簡単です。count()

$results = $wpdb->get_results($query);

foreach($results as $result)
{
    $result->row_count =  count($results);
    ...
}

上記は、使用する必要のある合計が必要な場合に、フェッチされた行の数のみを示していますSQL_CALC_FOUND_ROWSmysql_num_rows()

$query = "SELECT SQL_CALC_FOUND_ROWS ...

$result_count = mysql_num_rows();
于 2012-06-29T07:25:29.060 に答える
0

多くのことを試しましたが成功しなかったので、ページネーションだけのために別の別のDBクエリを作成しました。

$page_query = "
    SELECT p.id 
    FROM 
    $posts_table as p, 
    $tag_table as c
    WHERE p.id=c.post_id
    GROUP BY p.id
";

ページネーションに使用できる行の総数の結果が得られます。

于 2012-06-29T08:26:44.397 に答える