SELECT webcal_entry.cal_id, webcal_entry.cal_name , webcal_entry.cal_priority,
webcal_entry.cal_date , webcal_entry.cal_time , webcal_entry_user.cal_status,
webcal_entry.cal_create_by , webcal_entry.cal_access, webcal_entry.cal_duration ,
webcal_entry.cal_description , webcal_entry_user.cal_category
FROM webcal_entry, webcal_entry_user
WHERE webcal_entry.cal_date BETWEEN '20090601' AND '20090631'
当我执行该查询时,php会抛出:
mysql_query(): unable to save result set
MySQL client ran out of memory
当我限制结果时,我发现它回收了大约280万个结果。该表有7,241行。
我意识到我可以使用LIKE,但我真的不想走那条路。
感谢您的帮助!
答案 0 :(得分:5)
您正在加入webcal_entry
子句中的webcal_entry_user
和FROM
表,但您没有任何JOIN ON
或WHERE
条件限制来自{的哪些行{1}}返回。结果将是两个表格的笛卡尔积,这基本上意味着您将获得具有有效webcal_entry_user
,乘以除行数的每个webcal_entry
行在cal_date
表中。
换句话说,如果webcal_entry_user
有400行,你将获得400 * 7241 = 280万行!糟糕!
答案 1 :(得分:2)
你正在做cartesian join。基本上,对于第一个表中的每一行,您将加入第二个表中的所有行。如果第一个表有4行而第二个表10则结果集将有40(4x10)
答案 2 :(得分:2)
您需要将两个表中存在的密钥添加到WHERE子句中。类似的东西:
AND webcal_entry.user_id = webcal_entry_user.user_id