排除mysql中包含没有NOT LIKE运算符的年份的行

时间:2014-11-22 18:26:16

标签: mysql laravel eloquent

我有一个包含标签的表格。几乎所有标签都是流派(例如动作和喜剧)。但是,还有Winter 2014Summer 2012等标记。这些是季节性标签。

我想从类型列表中排除这些标记。那么如何在查询中排除那些季节性标签?

我不想使用NOT LIKE运算符的原因是为了防止全表扫描。

这就是我目前所拥有的(雄辩的):

$genres = Tag::where('slug', 'not like', '%20%')->get()->lists('name');

旁注:赞赏laravel 4(雄辩)方法但不是必需的。

这是我的表

+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| id      | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| slug    | varchar(255)     | NO   | MUL | NULL    |                |
| name    | varchar(255)     | NO   |     | NULL    |                |
| suggest | tinyint(1)       | NO   |     | 0       |                |
| count   | int(10) unsigned | NO   |     | 0       |                |
+---------+------------------+------+-----+---------+----------------+

2 个答案:

答案 0 :(得分:1)

如果我是你,我会在此表中添加seasonal tinyint(1)字段,现在您只需运行:

$genres = Tag::whereSeasonal(0)->get()->lists('name');

获取非季节性标签。

如果你不能这样做,你可以将季节性标签的ID存储在PHP数组中(或者在另一个表格中) - 我不知道你有多少标签以及添加季节性标签的次数,然后你可以得到非季节性标签:

$genres = Tag::whereNotIn('id', $arrayOFSesonalIds)->get()->lists('name');

答案 1 :(得分:0)

如果您正在寻找一种解决方案,可以在存储为字符串(CHAR / VARCHAR)的数据字段中排除多年,NOT LIKE可能是解决此问题的最佳方法脱离你对问题的描述。如果您检查的日期为DATE / DATETIME / TIMESTAMP,则可以使用YEAR() MySQL函数将年份从您希望比较的字段中抽出

如果没有,您是否可以为要执行此操作的表提供DESCRIBE tablename的输出?