我正在为我的网页实施一个非常简单的搜索功能。有一个表名称任务有4列感兴趣:名称,descritption,状态(最后一个是多选,有三个可能的选择)和用户名。
所以我这样做了搜索:
SELECT * FROM tasks WHERE ((description LIKE '%search_val%' OR name LIKE '%search_val%') AND status='selected_status')
出于所有意图和目的,这是有效的。但是现在我意识到我想要用户输入的搜索模式(上面的句子在PHP代码中执行)也能够搜索不同表的列名和姓:table users。如果有用户名的任务(两个表共有的字段),那么也是查询的结果。
所以说,用户在搜索框中输入John。我想显示任何带有用户名的任务,用户将John作为姓氏或名字,并在说明或任务名称中显示包含John的任何任务。
我如何为此编写查询?
答案 0 :(得分:0)
使用JOIN
关联users
和tasks
表,并将这两个查询与UNION
SELECT *
FROM tasks
WHERE description LIKE '%search_val%' OR name LIKE '%search_val%'
UNION
SELECT t.*
FROM tasks AS t
JOIN users AS u ON t.username = u.username
WHERE u.name LIKE '%search_val%' OR u.lastname LIKE '%search_val%'