それはなぜです?コンソールで同じクエリを試したところ、複数の行が返されました。これがクエリです:
$this->wpdb->get_row("SELECT * FROM ".$this->wpdb->users." WHERE status = 'active'", ARRAY_A);
アクティブなユーザーが複数いる場合、同じ単一行を返し続けます。私は何かが足りないのですか?
確かに、get_row()
は1つの結果が得られると期待される場合にのみ使用してください。それ以外の場合はget_results()
を使用できます。
データベースからデータを取得する方法は3つあります。
1 .$wpdb->get_var
:データベーステーブルから単一の値を取得するためにこれを使います。あなたがコメントの総数を数えたい場合のように。あなたは以下の方法でそれをすることができます:
<?php
$comment_count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->comments;"));
echo '<p>Total comments: ' . $comment_count . '</p>';
?>
2 .$wpdb->get_row
:テーブル行全体を取得するにはこれを使うことができます。
例:
<?php
$thepost = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = 1" ) );
echo $thepost->post_title;
?>
OR
<?php
$thepost = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = 1" ), ARRAY_A );
print_r ($thepost);
?>
Get_rowでARRAY_A
パラメータを使用することで、投稿データは連想配列として返されます。あるいは、ARRAY_N
パラメータを使用して、投稿データを数値インデックス配列で返すこともできます。
3 .$wpdb->get_results
:標準のSELECT
クエリは、データベースから複数行のデータを取得するためにget_results関数を使用するべきです。
<?php
global $wpdb;
$allposts = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish'") );
foreach ($allposts as $singlepost) {
echo '<p>' .$singlepost->post_title. '</p>';
}
?>
そしてあなたが期待できるように、あなたは最後のものが必要です。
$wpdb->get_row('query', output_type, row_offset);
row_offset(integer)目的の行(0が最初の行)です。デフォルトは0です。
私の解決策は簡単です。
<?php
function count_results() {
# use the data base
global $wpdb;
# Query to count all results from one table
$sql_count_results = '
SELECT count(*) as count
FROM `YOUR_TABLE`;';
# Ejecute function
$results = $wpdb->get_row( $sql_count_results , OBJECT );
# Return results
return $results->count;
}
つかいます:
<?php
echo count_results();