选择以特定字母或数字开头的所有记录

时间:2014-08-23 22:25:19

标签: php mysql

我目前正在使用这个PHP代码从数据库中提取记录,以便以1,A,B或C开头的记录,以便我可以细分超长的2500条记录列表。

'where' =>
        "record_approved='1' AND {$data['database']['database_field_title']} LIKE 'A%' OR {$data['database']['database_field_title']} LIKE '1%' OR {$data['database']['database_field_title']} LIKE 'B%' OR {$data['database']['database_field_title']} LIKE 'C%'",

现在这段代码工作正常。

但是我可以减少这个吗?对于2,3,4,5 ......以及每封信,我真的不想多次使用OR。

还是我?

此后,我遇到以下代码的问题。

$this->_catRecords1 = array();
            $this->DB->build(
            array(
            'select' =>
            $data['database']['database_field_title'].', primary_id_field, record_static_furl, record_dynamic_furl',
            'from' => $data['database']['database_database'],
            'where' =>
            "record_approved='1' AND field_46 NOT IN ('17', '18', '19', '20', '30', '140', '141', '142', '143', '144', '145', '146', '147', '148', '149', '150', '151, '152', '153', '154', '155', '156', '157', '158', '159', '160', '161, '162', '163', '164', '165', '166') AND LEFT({$data['database']['database_field_title']}, 1) IN('A','0','1','2','3','4','5','6','7','8','9')",
            'limit' => array(0, 3000),
            'order' => $data['database']['database_field_title'].' ASC'
            ) );
            $otherData = $this->DB->execute();
            while ( $row = $this->DB->fetch($otherData) )
            {
            $row['title'] = $row[$data['database']['database_field_title']];
            $row['_skipUpdateDynamic'] = true;
            $row['url'] = $this->registry->ccsFunctions->returnDatabaseUrl($data['database']['database_id'], 0, $row);
            $this->_catRecords1[] = $row;
            }

field_46是一个包含1到200之间的数字的列。

没有

AND field_46 NOT IN ('17', '18', '19', '20', '30', '140', '141', '142', '143', '144', '145', '146', '147', '148', '149', '150', '151, '152', '153', '154', '155', '156', '157', '158', '159', '160', '161, '162', '163', '164', '165', '166') 

代码运行正常。所以我必须在那里做错事。

只是得到一个非常通用的MySQL错误,说我的代码中有错误!

由于

1 个答案:

答案 0 :(得分:2)

为什么不使用string function和IN()?

WHERE record_approved='1' AND LEFT(your_string, 1) IN('A','1','B','C')

这里我们使用LEFT函数来获取字符串,然后使用字符数...所以在这种情况下,获取字符串中的第一个字符将是LEFT(string, 1) ..然后说它匹配字段A,1,B,C ..这就是IN()所做的。

注意:

如果您只在列中存储一个数字(record_approved),我建议将其保存为INT ..作为一般经验法则,您应该将数据存储为其预期的数据类型。