我在phpmyadming中输入此查询时遇到一个奇怪的问题:
SELECT DISTINCT E.* FROM Events E, TICKET T WHERE ((E.idEvent=T.IDEvent AND T.Email='david@fakesite.com')OR (E.email = 'david@fakesite.com')) AND E.dateEvent >= '2012-01-27 20:04:28' ORDER BY E.dateEvent ASC
我没有记录,没有发现错误或任何错误,好像我从未进行过查询。我强烈相信之前在phpmyadmin上运行的查询,但现在我似乎无法让它在本地或服务器中运行。两台不同的机器,本地我有MAMP和服务器linux。
最奇怪的是,如果查询是由php完成的,那么它会返回正确的值。
知道发生了什么事吗?
感谢。
答案 0 :(得分:0)
对于初学者,如果T.email不等于'david@air-ticket.com.es',则您当前的查询可能会返回笛卡尔积。这是包含JOIN条件的WHERE的唯一部分。
您应该考虑明确说明您的JOIN和ON关键字(然后您的WHERE子句变得更容易理解):
SELECT DISTINCT E.*
FROM Events E
INNER JOIN TICKET T ON E.idEvent=T.IDEvent
WHERE (T.Email='david@air-ticket.com.es' OR E.email = 'david@myweb.com')
AND E.dateEvent >= '2012-01-27 20:04:28'
ORDER BY E.dateEvent ASC
并且Ticket和Events表都包含电子邮件字段吗?或者其中一个是类型o?
对于初学者,请尝试上述查询。