我有一个包含标签的表格。几乎所有标签都是流派(例如动作和喜剧)。但是,还有Winter 2014
和Summer 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 | |
+---------+------------------+------+-----+---------+----------------+
答案 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
的输出?