简体   繁体   English

SQL连接查询问题

[英]Sql Join Query Issue

I've a mysql table called tutor_signup_form is look like this 我有一个名为tutor_signup_form的mysql表看起来像这样

id    feerange    gender    name
1     20          male      alex      
2     10          female    Robin
3     15          male      Babu

Now I've a html search form where few drop down selected fields and many Chckbox fields are exist. 现在,我有一个html搜索表单,其中没有几个下拉选定的字段,并且存在许多Chckbox字段。 I want to get the search result from multiple table using sql INNER JOIN . 我想使用sql INNER JOIN从多个表中获取搜索结果。 My INNER JOIN query is look like this 我的INNER JOIN查询看起来像这样

// search query
$query =  mysql_query("SELECT tutor_signup_form . *, tutor_signup_edu_psle . *,
tutor_signup_edu_olevel . *, tutor_signup_edu_alevel . *, tutor_signup_edu_diploma . *,
tutor_signup_edu_degree . *, tutor_signup_edu_masters . *, tutor_signup_edu_psd . *,
tutor_signup_level_primary . *, tutor_signup_level_olevel . *, tutor_signup_level_alevel . *,
tutor_signup_level_int . *, tutor_signup_level_uni . *, tutor_signup_level_music . *,
tutor_signup_level_lang . *, tutor_signup_level_com . *, tutor_signup_pre_central . *,
tutor_signup_pre_east . *, tutor_signup_pre_west . *, tutor_signup_pre_south . *,
tutor_signup_pre_north . *, tutor_signup_pre_ne . *, tutor_signup_pre_nw . *  FROM tutor_signup_form

INNER JOIN tutor_signup_edu_psle ON tutor_signup_form.tutor_id = tutor_signup_form.tutor_id     
INNER JOIN tutor_signup_edu_olevel ON tutor_signup_form.tutor_id = tutor_signup_edu_olevel.tutor_id
INNER JOIN tutor_signup_edu_alevel ON tutor_signup_form.tutor_id = tutor_signup_edu_alevel.tutor_id 
INNER JOIN tutor_signup_edu_diploma ON tutor_signup_form.tutor_id = tutor_signup_edu_diploma.tutor_id
INNER JOIN tutor_signup_edu_degree ON tutor_signup_form.tutor_id = tutor_signup_edu_degree.tutor_id
INNER JOIN tutor_signup_edu_masters ON tutor_signup_form.tutor_id = tutor_signup_edu_masters.tutor_id
INNER JOIN tutor_signup_edu_psd ON tutor_signup_form.tutor_id = tutor_signup_edu_psd.tutor_id
INNER JOIN tutor_signup_level_primary ON tutor_signup_form.tutor_id = tutor_signup_level_primary.tutor_id
INNER JOIN tutor_signup_level_olevel ON tutor_signup_form.tutor_id = tutor_signup_level_olevel.tutor_id
INNER JOIN tutor_signup_level_alevel ON tutor_signup_form.tutor_id = tutor_signup_level_alevel.tutor_id
INNER JOIN tutor_signup_level_int ON tutor_signup_form.tutor_id = tutor_signup_level_int.tutor_id
INNER JOIN tutor_signup_level_uni ON tutor_signup_form.tutor_id =  tutor_signup_level_uni.tutor_id
INNER JOIN tutor_signup_level_music ON tutor_signup_form.tutor_id = tutor_signup_level_music.tutor_id
INNER JOIN tutor_signup_level_lang ON tutor_signup_form.tutor_id = tutor_signup_level_lang.tutor_id
INNER JOIN tutor_signup_level_com ON tutor_signup_form.tutor_id =  tutor_signup_level_com.tutor_id
INNER JOIN tutor_signup_pre_central ON tutor_signup_form.tutor_id = tutor_signup_pre_central.tutor_id
INNER JOIN tutor_signup_pre_east ON tutor_signup_form.tutor_id = tutor_signup_pre_east.tutor_id
INNER JOIN tutor_signup_pre_west ON tutor_signup_form.tutor_id = tutor_signup_pre_west.tutor_id
INNER JOIN tutor_signup_pre_south ON tutor_signup_form.tutor_id = tutor_signup_pre_south.tutor_id
INNER JOIN tutor_signup_pre_north ON tutor_signup_form.tutor_id =  tutor_signup_pre_north.tutor_id
INNER JOIN tutor_signup_pre_ne ON tutor_signup_form.tutor_id = tutor_signup_pre_ne.tutor_id
INNER JOIN tutor_signup_pre_nw ON tutor_signup_form.tutor_id = tutor_signup_pre_nw.tutor_id 

WHERE tutor_signup_form.feerange <= '$budget'");  

For example I selected budget field = 20. So my query should be product only 3 results from tutor_signup_form but it's produce 24 results. 例如,我选择的预算字段=20。因此,我的查询应该是tutor_signup_form仅乘积3个结果,但它会产生24个结果。 I don't understand why it's produce 24 result. 我不明白为什么会产生24个结果。 Can you fix it ? 你能修好它吗 ?

Update: 更新:

在此处输入图片说明

As Deadman mentioned, Cartesian... 正如戴德曼所说,笛卡尔式...

Your first inner join was a copy/paste of table names 您的第一个内部联接是表名称的副本/粘贴

INNER JOIN tutor_signup_edu_psle 
   ON tutor_signup_form.tutor_id = tutor_signup_form.tutor_id     

should have been 本来应该

INNER JOIN tutor_signup_edu_psle 
   ON tutor_signup_form.tutor_id = tutor_signup_edu_psle.tutor_id     

I have not read past that, but will in the mean-time 我没有读过去,但与此同时

In addition, you have all your joins as INNER JOINs. 此外,您所有的联接都为“内部联接”。 If someone does not have a record in one of the tables (such as Music), but does tutoring in Computers, and someone searches for Computers, they will not be returned. 如果某人在其中一个表中没有记录(例如音乐),但是在计算机中进行了辅导,并且有人在搜索计算机,则不会返回这些记录。 I suggest changing to LEFT JOIN for all of them, so if the record exists in the tutoring subsidiary level, you are good and won't loose it. 我建议所有人员都改为LEFT JOIN,因此,如果该记录存​​在于补习子公司级别,那么您会很好,并且不会失去它。

If I've got it right you need to check your where clause.i think Cartesian product of the tables involved in the join. 如果我做对了,则需要检查您的where子句。我认为联接所涉及的表的笛卡尔积。 The size of a Cartesian product result set is the number of rows in the first table multiplied by the number of rows in the second table 笛卡尔乘积结果集的大小是第一个表中的行数乘以第二个表中的行数

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM