1

提供されているアクティブ レコード クラスを使用して、ExpressionEngine の MySQL データベースから 2 つの異なる行とそのフィールド値 (forum_total_topics と forum_total_posts) を合計しています。数値を合計するために複数のバージョンのコードを試しました。と言って、MySQLクエリをリクエストに渡そうとしましたが失敗しました。

$SQL = "SELECT forum_id, sum(forum_total_topics) + sum(forum_total_posts)
FROM exp_forums"

ee()->db->select($SQL); 
$query = ee->db->get('exp_forums');
echo $query;

合計をエコーし​​、次のエラーを取得します。

エラー番号: 1064

SQL 構文にエラーがあります。2行目のnear ''を使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

SELECT (SELECT SUM(forum_total_topics) + SUM(forum_total_posts) FROM ( exp_forums)

厄介な解決策

そのため、解決策を見つけるためにリクエスト全体を分割しようとしました。複数の配列を返し、それらを合計することで、次のコードが機能するようになりましたが、かなり面倒です。どうすれば、テーブルから 2 つの行を 1 行程度で返して合計することができますか?

$topics = ee()->db->select_sum('forum_total_topics')->get('exp_forums');
foreach($topics->result_array() as $topicrow) {
    $totalTopics = $topicrow['forum_total_topics'];
}

$posts = ee()->db->select_sum('forum_total_posts')->get('exp_forums');
foreach($posts->result_array() as $postrow) {
    $totalPosts = $postrow['forum_total_posts'];
}

$total = $totalTopics + $totalPosts;

どんな提案でも大歓迎です!

試した提案

といった提案を試みたのですが、

$SQL = "SELECT forum_id, SUM(forum_total_topics + forum_total_posts) AS total
FROM exp_forums
GROUP BY forum_id";

$query = ee()->db->select($SQL); 
echo $query;

代わりにこのエラーが発生します。

PHP エラーが発生しました 重大度: 4096 メッセージ: クラス CI_DB_mysql_driver のオブジェクトを文字列に変換できませんでした ファイル名: libraries/Functions.php(679): eval() されたコード 行番号: 98

4

3 に答える 3

1

代わりにこのようにしてみてください

SELECT forum_id, sum(forum_total_topics+forum_total_posts)
FROM exp_forums
GROUP BY forum_id

sqlfiddle demo

于 2013-10-23T14:51:21.033 に答える
0

これを試して

SELECT forum_id, SUM(forum_total_topics + forum_total_posts) AS total
FROM exp_forums
GROUP BY forum_id
于 2013-10-23T14:55:45.647 に答える