比较用逗号分隔的字符串中的数据,而不使用explode

时间:2015-10-27 01:47:07

标签: php laravel eloquent explode

如果没有经过爆炸功能并且只是直接使用eloquent,如果在deleted_by_id中存在用户ID,我有什么办法可以比较吗?我正在使用laravel 4.2顺便说一句。下面是一个示例表:

messages    
+-----------------------------+------------------+
+ id | message                + deleted_by_id    +
+-----------------------------+------------------+
+  1 | hello                  + 65,72            +
+  2 | thank you              + 54,33,89         +
+-----------------------------+------------------+

我正在尝试比较在deleted_by_id中是否存在用户ID,因此该消息将显示在垃圾视图中。

2 个答案:

答案 0 :(得分:1)

您可以将SELECT语句与LIKE运算符一起用作一种方法,但随着用户ID值的增加,这会产生意外结果。另一种方法是使用REGEX

MySQL功能

MySQL Regex

要添加到此,因为您想要使用Eloquent,您可以尝试使用Regex的whereRaw()语句...

Message::whereRaw("deleted_by_id REGEX 8{1}9{1}"); //find 89

这是未经测试的,您每次都必须根据您要查找的内容更新正则表达式,但我只能看到Eloquent的选项。

最终,您最好的选择是重新考虑您的表结构,以便您可以将每个用户ID存储在自己的行中。

MySQL Regex Pattern Matching

答案 1 :(得分:1)

没有func allItems() -> [TodoItem] { var todoDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(ITEMS_KEY) ?? [:] let items = Array(todoDictionary.values) return items.map({TodoItem(deadline: $0["deadline"] as! NSDate, title: $0["title"] as! String, UUID: $0["UUID"] as! String!)}).sorted({(left: TodoItem, right:TodoItem) -> Bool in (left.deadline.compare(right.deadline) == .OrderedAscending) }) } like,但regex(我猜它 MySQL ):

find_in_set

显然建议 - 规范化db;)