我有以下表格结构:
var notif = UILocalNotification()
notif.timeZone = NSTimeZone.defaultTimeZone()
let morningOfChristmasComponents = NSDateComponents()
morningOfChristmasComponents.year = 2016
morningOfChristmasComponents.month = 03
morningOfChristmasComponents.day = 30
morningOfChristmasComponents.hour = 15
morningOfChristmasComponents.minute = 59
morningOfChristmasComponents.second = 0
let morningOfChristmas = NSCalendar.currentCalendar().dateFromComponents(morningOfChristmasComponents)!
let formatter = NSDateFormatter()
formatter.dateStyle = NSDateFormatterStyle.LongStyle
formatter.timeStyle = .MediumStyle
let dateString = formatter.stringFromDate(morningOfChristmas)
notif.fireDate = morningOfChristmas
notif.alertBody = "alarma wolf"
notif.userInfo = ["identificador": "wolf"]
UIApplication.sharedApplication().scheduleLocalNotification(notif)
print("alarma fijada para \(dateString)")
每个披萨以及订单都可以有多个标签。
问题是如何找到给定订单的最佳披萨(order_id)。更多"匹配"标签披萨和订单有,我们可以找到任何给定订单的更好的披萨。
我尝试了一些具有交叉和连接的不同SQL查询,但没有找到或多或少的快速查询来解决所描述的问题。
请告知。
答案 0 :(得分:1)
这个想法是tag_id
上两个标签表之间的连接。其余的只是聚合,过滤和计数。
select ot.order_id, count(*) as NumMatching
from order_tags ot join
pizza_tags pt
on ot.tag_id = pt.tag_id
where pt.pizza_id = @PIZZA_ID
group by ot.order_id
order by NumMatching desc;
答案 1 :(得分:1)
如果我正确理解了这个问题,你应该能够使用子查询完成此任务。像这样:
SELECT o.id, o.order_id, o.tag_id,
(SELECT COUNT(*) FROM pizza_tags AS p WHERE p.tag_id = o.tag_id) AS p_tags
FROM order_tags AS o
GROUP BY o.order_id, o.tag_id
ORDER BY p_tags DESC;
基本上,您获得的任何pizza_tags
都与order_tags.tag_id
匹配,并使用最相关的排序。{/ p>
我已经整理了一个最小的小提琴here。