1

このコードを phpMyAdmin で実行しようとしています。しかし、次のエラーが発生します

#1243 - EXECUTE に与えられた不明なプリペアド ステートメント ハンドラ (stmt)

    SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'count(distinct CASE WHEN topic = ''',
      topic,
      ''' THEN t2.id END) AS `',
      topic, '`'
    )
  ) INTO @sql
FROM
(
  select count(distinct id) total, topic
  from table2 
  group by topic
  order by total desc
  limit 2
) d;

SET @sql 
  = CONCAT('SELECT t1.year, ', @sql, ' 
            from table1 t1
            left join table2 t2
              on t1.id = t2.id
            group by t1.year');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

実装については、フィドルを確認してください。

これを修正する方法は?また、コメンターが言及したように、これはスクリプトを介して送信されたときに機能します。PHPでスクリプトを作成する方法はありますか?

4

1 に答える 1

0

これは、PMA が同じ mysql セッションを使用してクエリを実行しないためです。そのため、エラーが発生します。

ただし、同じ mysql 関数を使用してスクリプトでこれを実行する場合は、機能するはずです。

于 2013-07-02T06:55:46.520 に答える