-1

我正在构建一个 ajax Web 应用程序,并且我在 jquery 中显示了一个链选择,它在幕后进行了一些选择,并为我节省了大量编写新路线和视图的时间。但是,我想知道是否有一种方法可以减少通过不编写新模型,我的工作更进一步。

我有这个controller

<?php
class Tools extends CI_Controller {

    public function message($to = 'World')
    {
        echo "Hello {$to}!".PHP_EOL;
    }
    public function boom(){
    echo "boom".PHP_EOL;
    }
    public function q(){
    $sql = "SELECT * FROM members WHERE member_id = ? AND member_club_id = ? AND membership_year = ?";

    $count = $this->db->query($sql, array(null, 1, null));
    foreach ($count->result() as $row)
    {
    echo $row->member_name . PHP_EOL; 
    }
    }
}
?>

这是尝试跳过某些列并显示其他列。

这是它的 sql 等价物

SELECT * FROM members WHERE member_id = null AND member_club_id = 1 AND membership_year = null;

他们都没有显示任何东西。有没有办法我可以跳过我选择的列?

4

3 回答 3

1

您可以像这样显式设置返回哪些列

SELECT id, member_name FROM members WHERE member_id = null AND member_club_id = 1 AND membership_year = null;

如果您实际上是指“跳过行”,则可以使用LIMIT

SELECT * FROM members WHERE member_id = null AND member_club_id = 1 AND membership_year = null LIMIT 5, 5;

这将返回第 6、7、8、9 和 10 行的所有列

于 2013-07-31T11:39:24.960 回答
1

您的意思是跳过语句 where 部分中的列吗?

您的查询未返回任何行的原因是,与 null 相比,任何内容都将评估为 false:

  • 无论 column 的值如何,column = null 都是 false
  • 无论列的值如何,列 <> null 也是错误的

如果你真的不想修改查询生成,你可以使用这样的东西:

SELECT * FROM members 
WHERE (? is null OR member_id = ?) 
  AND (? is null OR member_club_id = ?) 
  AND (? is null OR membership_year = ?)

但是我不建议这样做,因为数据库引擎将无法识别一个好的索引来解决使用这样的语句的查询。我首选的解决方案是根据收到的参数动态生成 SQL。仅当值不为空时才会插入条件。

于 2013-07-31T12:49:58.003 回答
0

这真的很奇怪

SELECT * FROM members WHERE member_id = (select member_id) AND member_club_id = 1 AND membership_year = (select membership_year);

SELECT * FROM members WHERE member_id = (select member_id) AND member_club_id = (select member_club_id=1) AND membership_year = (select membership_year);

两个查询都有效。

于 2013-07-31T12:11:00.903 回答