我想搜索多个列和多个表。
我在这里将所有表格导入到sqlfiddle:http://www.sqlfiddle.com/#!2/60689e/3
我想要选择的是user id, name_surname, avatar, from users table
基于关键字,匹配用户表中的“location”或“name_surname”列。这相对简单:
SELECT u.name_surname,
u.avatar,
u.location
FROM users u
WHERE u.location LIKE :kwd
OR u.name_surname LIKE :kwd
对我来说棘手的部分是在 words_en 表中查询匹配表,基本上应该查询连接表,其中我实际上可以看到哪个用户与哪个单词相关联...我该怎么办?这最后一部分让我逃避。
所以我可能需要:
谢谢你的期待。 S上。
答案 0 :(得分:0)
根据对words_en
表的搜索,让所有用户看起来像SQL Fiddle:
SELECT u.id, u.name_surname, u.avatar
FROM users AS u
WHERE u.id IN
(
SELECT c.user_id
FROM connections AS c
JOIN words_en AS w
ON w.id = c.word_id
WHERE w.word = 'word1'
OR w.word = 'word2'
)
AND u.location LIKE '%Nunya%'
OR u.name_surname LIKE '%sandro%'
如果要对三个字段中的任何一个使用相同的搜索词,请使用以下内容:
SELECT u.name_surname, u.avatar, u.location
FROM users AS u
JOIN connections AS c ON c.user_id = u.id
JOIN words_en AS w ON w.id = c.word_id
WHERE (w.word LIKE '%word1%'
OR u.location LIKE '%word1%'
OR u.name_surname LIKE '%word1%')
AND u.privacy = 3
答案 1 :(得分:0)
我希望我没有误解你的问题。如果我错在哪里,请纠正我。
SELECT u.name_surname,
u.avatar,
u.location
FROM USERS AS U
INNER JOIN CONNECTIONS AS C
ON C.USER_ID = U.ID
INNER JOIN WORDS_EN AS W
ON W.ID = C.WORD_ID
AND W.WORD LIKE 'word1%'
我有一个硬编码的word1,例如,如果你需要所有用户信息都有连接而不管他们在WORDS_EN中的单词是什么,你也可以将INNER JOIN
WORDS_EN
作为LEFT JOIN
。