所以,我有两个表:单词和单词学习
我正在开发一个项目,您可以在其中学习一些新词汇(作为一个 child ),我希望获得:其中字母与用户学到的最后一个单词相同的所有单词。我不知道这是否清楚,但它是这样的:我学会了单词
- “ cookies ”
- “鸟”
- “蓝色”
我想获取首字母与蓝色相同的所有单词,因为它是用户学到的最后一个单词。
我写的代码是这样的:
select *
from words p
where letter = (
select letter
from words p
where exists (
select max(idWord)
from wordslearned pa
where p.idWord = pa.idWord and pa.idUser = idUser
)
order by idWord desc
limit 1
)
但是通过这段代码,它向我显示了用户仍然没有学到的单词,因为“desc”而从底部开始。
有人可以帮助我吗?如果您不明白,请告诉我,以便我向您澄清。
最佳答案
EXISTS
仅检查子查询是否找到任何行,不使用它选择的值。因此 MAX(idWord)
没有用于任何用途。
您想要获取用户学到的最后一行的字母,即:
SELECT letter
FROM wordsLearned pa
ORDER BY idWord DESC
WHERE pa.idUser = p.idUser
LIMIT 1
整个查询将是:
SELECT *
FROM words p
WHERE letter = (
SELECT letter
FROM wordsLearned pa
WHERE pa.idUser = p.idUser
ORDER BY idWord DESC
LIMIT 1
)
这也可以写成 JOIN:
SELECT p.*
FROM words p
JOIN wordsLearned p1 ON p.letter = p1.letter AND p.idUser = p1.idUser
JOIN (
SELECT idUser, MAX(idWord) AS maxId
FROM wordsLearned
GROUP BY idUser) p2 ON p1.idUser = p2.idUser and p1.idWord = p2.maxId
关于php - phpmyadmin sql 代码出现问题,在两个单词表和单词学习表之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55698949/