选择错误的结果

时间:2015-11-12 14:08:31

标签: sql database select mysqli

当我从数据库中选择这样的东西时,它会给我一个错误的结果:

SELECT *
FROM Werkwoord_spelling
WHERE tijd = 'tt'
AND soort = 'sw'
AND vorm = 'i'
OR vorm = 'j'
ORDER BY RAND()
LIMIT 20

结果中有一些行:

 527  Afgelopen zomer leefde jij al twaalf jaar. vt zw j leven leefde
 1346 Stop je nog met kletsen? tt zw j stoppen Stop

你可以看到我在第527行有一个'vt',但我只要求第1346行中有'tt'的行。

我该如何解决这个问题?

Sietsko

4 个答案:

答案 0 :(得分:1)

您需要为逻辑组添加括号。 我认为查询是这个

SELECT *
FROM Werkwoord_spelling
WHERE tijd = 'tt'
AND soort = 'sw'
AND (vorm = 'i'OR vorm = 'j')
ORDER BY RAND()
LIMIT 20

答案 1 :(得分:1)

那是因为你的地方有一个or。 改为:

SELECT * FROM Werkwoord_spelling WHERE tijd = 'tt' AND soort = 'sw' AND (vorm = 'i' OR vorm= 'j' ORDER BY RAND() LIMIT 20)

它工作正常。

答案 2 :(得分:1)

请注意,AND优先于OR,因此您的WHERE条件等同于:

WHERE (tijd = 'tt' AND soort = 'sw' AND vorm = 'i') OR vorm = 'j'

我想它必须是:

WHERE tijd = 'tt' AND soort = 'sw' AND (vorm = 'i' OR vorm = 'j')

所以使用括号。

答案 3 :(得分:1)

使用如下的几个括号重写您的查询:

SELECT * FROM Werkwoord_spelling 
WHERE tijd = 'tt' AND soort = 'sw' AND vorm in ('i', 'j') 
ORDER BY RAND() LIMIT 20

这样,您告诉数据库在满足所有条件的情况下为您提供记录:

  • tijd是tt
  • soort是sw
  • vorm是i或j

在您的查询中,OR的位置是个问题。数据库正在检索符合以下所有条件的记录

  • tijd是tt
  • soort是sw
  • vorm是i或j
  • 如果以上3个都无法匹配,那没关系。如果它有vorm ='j'
  • ,请给我记录