Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将MYSQL转换为Codeigniter_Mysql_Database_Codeigniter_Select - Fatal编程技术网

将MYSQL转换为Codeigniter

将MYSQL转换为Codeigniter,mysql,database,codeigniter,select,Mysql,Database,Codeigniter,Select,我正在尝试将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 = '(SEL

我正在尝试将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")
然后向下选择播客中的MAXmix_编号-3


关于写where语句的正确方法有什么想法吗?感谢您抽出时间。

如果您对使用CodeIgniter的活动记录语法不太在意,只需按原样使用查询即可:

$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来获得结果。

如果您对使用CodeIgniter的活动记录语法不太挑剔,您只需按原样使用查询即可:

$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获得结果。

设置where to false的第三个参数,以防止CI更改传递给第二个参数的字符串,然后可以执行子查询:

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();
$this->db->where接受可选的第三个参数。若您将其设置为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
将where的第三个参数设置为false,以防止CI更改传递给第二个参数的字符串,然后可以执行子查询:

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();
$this->db->where接受可选的第三个参数。若您将其设置为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

类似的问题-您不能直接使用活动记录在CI中执行子查询您是否将where语句调用为子查询?是的,它是查询中的查询,因此称为子查询。CI活动记录没有子查询的本机语法。但是如果你对下面的卫斯理解决方案满意,我很高兴。你为什么要使用不可读的CI活动记录符号?SQL是用于数据集操作的标准和众所周知的抽象语言。你为什么要抽象一个抽象概念?如果您使用$this->db->query方法并编写普通SQL,那么您的代码将更具可读性。@PatrickSavalle这篇文章中的一个坏例子,但它主要用于在$condition$this->db->where$x if$otherCondition$this->db->order\u by$y.等情况下构建动态查询。这比自己将SQL字符串混合在一起要好。另一个原因是,尽管大多数人都使用MySQL,但要标准化不同db供应商之间的不一致性。yadda yadda。非常类似的问题-您不能直接使用活动记录在CI中执行子查询您是否将where语句调用为编写的子查询?是的,它是查询内部的查询,因此称为子查询。CI活动记录没有子查询的本机语法。但是如果你对下面的卫斯理解决方案满意,我很高兴。你为什么要使用不可读的CI活动记录符号?SQL是用于数据集操作的标准和众所周知的抽象语言。你为什么要抽象一个抽象概念?如果您使用$this->db->query方法并编写普通SQL,那么您的代码将更具可读性。@PatrickSavalle这篇文章中的一个坏例子,但它主要用于在$condition$this->db->where$x if$otherCondition$this->db->order\u by$y.等情况下构建动态查询。这比自己将SQL字符串混合在一起要好。另一个原因是,尽管大多数人都使用MySQL,但要标准化不同db供应商之间的不一致性。yadda yadda。我试过了,它不会让我使用$query->resultorror,即使没有它,它也不会返回数据。我感谢反馈,我会用它进行实验,以供我自己学习。韦斯利·默奇有正确的方法。祝你一切顺利!我试过了,它不会让我使用$query->resultorror,即使没有它,它也不会返回数据。我很感谢反馈,会用它进行实验,以供我自己学习。韦斯利·默奇有正确的方法。祝你一切顺利!宾果,这让我更接近了。现在我只需要充实一下html。谢谢你,韦斯利和所有的艾尔斯宾戈,这让我更亲近了。现在我只需要充实一下html。谢谢韦斯利和其他人