【发布时间】:2018-03-25 20:41:51
【问题描述】:
我在 Mysql 中有两个表,一个是我需要向用户显示的所有数据,另一个是已删除项目的 URL 列表。
我想要做的是选择所有结果,只要该元素不存在于“已删除项目”表中。
在我的“Deleted_Items”表中,我有一个类型的 URL 列表
https://example.com/video/123456/
但在我的“项目”表中,URL 列包含以下内容:
https://example.com/video/123456/dogs_and_cats/
我需要做这样的事情(伪代码):
SELECT id, url, thumb FROM Items
WHERE Items.url NOT CONTAINS Deleted_Items.url
附注: 我有一个与其他两个表类似的情况,但不同之处在于,在“Items”表中我有一个 ID 列表,在“Deleted_Items”表中我也有一个 ID 列表,所以我应用了以下查询:
SELECT id, url, thumb
FROM Items
LEFT OUTER JOIN Deleted_Items
ON (Items.url = Deleted_Items.url)
WHERE Deleted_Items.url IS NULL
LIMIT 30
【问题讨论】:
-
使用与“ID 列表”查询相同的反连接模式。似乎匹配条件(在 ON 子句中)类似于
ON items.url LIKE CONCAT('%',deleted_items.url,'%')。 (LIKE 比较的潜在陷阱是_和%通配符。)LIKE比较的替代方法是正则表达式比较REGEXP(使用带有特殊字符的更复杂的规则),或者使用@ 987654330@ 或LOCATE()函数。
标签: php mysql sql string search