mysql - 如果没有匹配的行,则获取具有一个匹配条件的行或所有行
问题描述
我有一张简单的桌子
**targeted_url_redirect targeted_countries msg_type non_targeted_url**
http://new.botweet.com india,nepal,philippines NEW http://twisend.com
http://expapers.com United States,Canada OLD http://all.twisend.com
https://tweeasy.com india,england OLD http://all.twisend.com
我在我的网站上收到流量,followerise.com
我想根据上表中定义的国家/地区将用户重定向到特定的 URL。我可以编写查询来获取来自目标国家/地区的用户的行,这些目标存储在我的数据库中。targeted_countries
但是如果条件不返回任何行,我正在寻找一种解决方案来获取所有行。
我在下面写了查询。
SELECT * FROM tweeasy_website_redirection
WHERE message_type='OLD'
AND targeted_countries LIKE '%@country%'
如果访问者来自国家india
, england
, United States
,此查询为我提供所需的行Canada
但是,如果用户来自targeted_countries
列中未指定的国家/地区,我希望获取所有行(第 2 行和第 3 行)。
如果我需要将此表重组为 2 个或更多表以获得所需的结果,还请告诉我。
解决方案
一种选择使用not exists
:
SELECT t.*
FROM tweeasy_website_redirection t
WHERE
t.message_type = 'OLD'
AND (
t.targeted_countries LIKE '%@country%'
OR NOT EXISTS (
SELECT 1
FROM tweeasy_website_redirection t1
WHERE t1.targeted_countries LIKE '%@country%'
)
)
当涉及到表的结构时:一个设计缺陷是将值列表存储为 CSV 列表。您应该有两个单独的表:一个用于存储 url,另一个用于存储 url 和国家/地区之间的 1-N 关系。就像是:
table "url"
id targeted_url_redirect msg_type non_targeted_url
1 http://new.botweet.com NEW http://twisend.com
2 http://expapers.com OLD http://all.twisend.com
3 https://tweeasy.com OLD http://all.twisend.com
table "url_countries"
url_id country
1 india
1 nepal
1 philippines
2 united states
2 canada
3 india
3 england
推荐阅读
- python - 今天开始使用Python,遇到了一个无法真正解决的问题
- go - Golang:在单个选择中使用多个代码案例阻止整个循环
- python - Python将动态值设置为字典
- c# - 如何获取通过 Azure 函数事件中心触发器接收到的事件的 messageId 或 eventId?
- oracle - ADF_FACES-60097
- javascript - 当我在 React.js 中使用 setState 函数时页面重新加载
- c# - 某些服务无法构建。验证服务描述符时出错
- javascript - react-native 应用程序和 RapidAPI - AI 图片着色器
- github-actions - 仅在文件存在时提交
- c# - Image.Source = new BitmapImage(); 在 UWP 中不起作用