0

我想搜索多个列和多个表。

我在这里将所有表导入 sqlfiddle:http ://www.sqlfiddle.com/#!2/60689e/3

我想选择的是user id, name_surname, avatar, from users table基于关键字,匹配列“位置”或用户表中的“姓名姓氏”。这个比较简单:

SELECT u.name_surname,
       u.avatar,
       u.location
FROM users u
WHERE u.location LIKE :kwd
OR u.name_surname LIKE :kwd

对我来说棘手的部分是查询表以查找 words_en表中的匹配项,该表本质上应该针对连接表进行查询,在该表中我实际上可以看到哪个用户与哪个单词相关联......我该怎么做最后一部分让我无法理解。

所以我可能需要:

  1. 查询 words_en 并找出是否有匹配项。
  2. 如果有匹配项,我需要查看 word_en 单词的 id 并查看该 id 是否存在于连接表中。
  3. 从连接表中选择不同的 user_ids。
  4. 为选定的 user_ids 选择 name_surname。

感谢您的关注。S。

4

2 回答 2

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
于 2013-11-12T18:13:34.217 回答
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 进行了硬编码,您也可以INNER JOIN假设WORDS_ENLEFT JOIN需要所有用户信息的连接,而不管他们在 WORDS_EN 中的单词如何。

于 2013-11-12T18:28:02.347 回答