質問: $db->loadobjectlist(); if ($db->geterrornum()) { jerror::raisewarning(500, $db->geterrormsg()); } return $options; } } このコードが原因で問題が発生しますが、クエリからlocate関数を削除すると問題なく機能します。もちろん、元のクエリを保持する必要があるため、これはオプションではありません。情報については、選択ボックスにはデフォルト値を含む両方の場合の値がロードされますが、デフォルト値を選択した場合でも、「オプションの選択」文字列に戻ります。ここで何が起こっているのでしょうか?
回答: いくつかの改良点/ベストプラクティスを示すために、@ dooversの投稿されたソリューションを取り上げます。_$query = $db->getquery(true) ->select("distinct substring_index(description2, '(', 1) as height"); ->from("#__cadcam_disc"); ->where("locate('(', description2) > 0") ->order("height"); _ substring_index()は、left(locate())と同等の単一の関数呼び出しです。 照会されるテーブルは1つしかないため(解決のあいまいさはありません)、テーブルエイリアス(a)は必要ありません。 where句に_(_がない値を除外する場合、正のlocate()値を確認するだけです(最初の文字は_0_の位置にありますが、タスクのロジックは、_> -1_、ergo _> 0_が実行するかどうかを確認する必要がないことを意味します。 heightの列エイリアスが指定されたselect句の文字列操作は、order by句で参照できます。これは目に優しいです。 これらの機能をよりよく知りたい人のための遊び場があります。 https://www.db-fiddle.com/f/ci6zfaqapkbmktak4t5kbm/