カスタムJoomlaコーディングは初めてなので、すみません。次のステートメントを実行します。
"SELECT
MAX(CASE WHEN v.FieldName = 'Team_Name' THEN v.FieldValue END) 'Team_Name'
, MAX(CASE WHEN v.FieldName = 'Manager_Name' THEN v.FieldValue END) 'Manager_Name'
FROM `team_values` v
where tournamentId=5"
しかし、私はそれを書く方法がわかりません、多くのシナリオを試しましたが、それらは私のためにうまくいきませんでした。
Joomlaコードがクエリを実行するように求めていると思いますか?
もし、そうなら
$db = JFactory::getDBo();
$query = $db->getQuery(true);
$query->select("MAX(CASE WHEN v.FieldName=".$db->q('Team_Name')." THEN v.FieldValue END) as Team_Name, MAX(CASE WHEN v.FieldName = ".$db->q('Manager_Name')." THEN v.FieldValue END) as Manager_Name")->from('#__team_values as v')->where('v.tournamentId='.$db->q(5));
$db->setQuery($query);
$final_data = $db->loadObject();
初めての場合は、いくつかの基本的なエラーチェックと、生成されたクエリと2列の結果セットを印刷します。
テストされていないコード:
_$db = JFactory::getDBO();
try {
$query = $db->getQuery(true)
->select(
array(
"MAX(CASE WHEN v.FieldName = 'Team_Name'
THEN v.FieldValue END) 'Team_Name'",
"MAX(CASE WHEN v.FieldName = 'Manager_Name'
THEN v.FieldValue END) 'Manager_Name'"
)
)
->from("#__team_values v")
->where("v.tournamentId = 5");
echo $query->dump(); // only if you wish to see what is generated. Of course, don't do this on your live/public site
$db->setQuery($query);
echo "<pre>";
var_export($db->loadAssocList()); // display the resultset
echo "</pre>";
} catch (Exception $e) {
echo "<div>", $e->getMessage(), "</div>"; // show error, if any. Of course, don't do this on your live/public site
}
_
クエリは変数またはmysqlの予約済みキーワードを使用しないため、テーブル名、列、および値を引用するための$db->q()
および$db->qn()
呼び出しを省略して、コードの膨張を減らすことができます。整数5は一重引用符で囲む必要はありません。
_->
_クエリメソッドをgetQuery
からチェーンして、_$query
_を再度書き出す必要がないようにします。
完全に引用符で囲まれたクエリで答えた同様の質問を表示するには、 この投稿を読む を使用します。
不安/不安があります...
これは、Joomlaのsqlメソッド呼び出しを使用したsqlの複製です。このクエリが意図したとおりに機能するかどうかは完全にはわかりません。テーブル構造/データのSQLFiddleデモを提供し、期待される結果を説明すると、クエリ自体を確認または修正できます。 loadRowList()
、loadAssocList()
、およびloadObjectList()
は複数行の結果セットを生成しますが、単一行のみが予期される場合は、loadRow()
、loadAssoc()
、またはloadObject()
の方が適しています。
FieldValue
が数値でない場合、MAX()
は奇妙な選択です。おそらく、これはクエリに最適ではありません。たぶん、あなたがMAX()
を使用している理由について教えてください。 FieldValue
の値が数値である場合、FieldName
の値を_[Word]_Name
_と名付けるというあなたの決定について懸念があります-つまり、おそらく_[Word]_id
_の方が適切でしょう。