1

MYSQL クエリを codeigniter に変換しようとしていますが、どこにも行きません。このクエリを変換しようとしています

$conn->prepare("SELECT `id`,`song`,`artist`,`album`,`track`,`mix_name`,`date` FROM `podcasts` where mix_number = (SELECT MAX(mix_number) FROM podcasts) order by track asc");

これは私のモデルにあります:

//$where = '(SELECT MAX(mix_number)from podcasts)';
$this->db->select('id,song,artist,album,track,mix_name,date, link');
//$this->db->where('mix_number', '(SELECT MAX(mix_number)from podcasts)');
$this->db->order_by('track', 'asc');
$query = $this->db->get('podcasts');
return $query->result();

私の問題領域は where ステートメントにあります。whereステートメントをコメントアウトすると、データが取得されます。明らかに、私が望む方法ではありません。

次のクエリが

("SELECT `id`,`song`,`artist`,`album`,`track`,`mix_name`,`date` FROM `podcasts` where mix_number = **(SELECT MAX(mix_number) FROM podcasts) - 1** order by track asc")

さらに (SELECT MAX(mix_number) FROM podcasts) - 3まで

whereステートメントを書く適切な方法について何か考えはありますか? ありがとうございました。

4

2 に答える 2

5

CI が 2 番目の引数に渡した文字列を変更しないように 3 番目の引数を設定するwhere()false、サブクエリを実行できます。

return $this->db
    ->select('id,song,artist,album,track,mix_name,date, link')
    ->where('mix_number', '(SELECT MAX(mix_number) from podcasts)', false)
    ->order_by('track', 'asc')
    ->get('podcasts')
    ->result();

https://www.codeigniter.com/userguide2/database/active_record.html

$this->db->where()は、オプションの 3 番目のパラメーターを受け入れます。FALSE に設定すると、CodeIgniter はフィールドまたはテーブル名をバッククォートで保護しようとしません。

私にとって、これにより次のクエリが生成されます。

SELECT `id`, `song`, `artist`, `album`, `track`, `mix_name`, `date`, `link`
FROM (`podcasts`)
WHERE mix_number = (SELECT MAX(mix_number) from podcasts) ORDER BY `track` asc
于 2013-03-05T21:43:32.320 に答える
2

CodeIgniter の Active Record 構文の使用にあまりこだわらない場合は、クエリをそのまま使用できます。

$sql = "SELECT `id`,`song`,`artist`,`album`,`track`,`mix_name`,`date` FROM `podcasts` where mix_number = (SELECT MAX(mix_number) FROM podcasts) order by track asc";

$this->db->query($sql);

次に、使用$query->result()して結果を取得します。

于 2013-03-05T21:40:48.303 に答える