次のようなクエリがあります。
select C.* from stream_data AS sd
JOIN Conversations AS C
ON (C.conversationReferenceId = sd.stream_data_id AND smAccountId = ?)
WHERE sd.stream_id = ? LIMIT 1
AdoDB を使用して実行します。このような:
$object = new Conversation();
$object->LoadFromRawQuery("select C.* from stream_data AS sd JOIN Conversations AS C ON (C.conversationReferenceId = sd.stream_data_id AND smAccountId = ?) WHERE sd.stream_id = ? LIMIT 1", array($socialmediaAccountId, $parentSourceId));
(注: AdoDB_RecordSet クラスに LoadFromRawQuery というメソッドを持つ AdoDB のカスタム バージョンがありますが、標準の Execute() メソッド呼び出しを使用して問題を確認できるため、そのままにしておきます。)
このクエリのパフォーマンスを向上させるために (インデックスに基づいて)、キャスト演算子を追加しました。
#Query:
select C.* from stream_data AS sd
JOIN Conversations AS C
ON (C.conversationReferenceId = cast(sd.stream_data_id as char) collate utf8_unicode_ci AND smAccountId = ?)
WHERE sd.stream_id = ? LIMIT 1
#PHP
$object = new Conversation();
$object->LoadFromRawQuery("select C.* from stream_data AS sd JOIN Conversations AS C ON (C.conversationReferenceId = cast(sd.stream_data_id as char) collate utf8_unicode_ci AND smAccountId = ?) WHERE sd.stream_id = ? LIMIT 1", array($socialmediaAccountId, $parentSourceId));
どちらの操作もコンソールで機能しますが、AdoDB では、最初の操作は成功し、2 番目の操作は失敗します。すべてのテーブルは UTF8 文字セットです。
ヘルプ。