[英]Sql Join Query Issue
我有一個名為tutor_signup_form
的mysql表看起來像這樣
id feerange gender name
1 20 male alex
2 10 female Robin
3 15 male Babu
現在,我有一個html搜索表單,其中沒有幾個下拉選定的字段,並且存在許多Chckbox字段。 我想使用sql INNER JOIN
從多個表中獲取搜索結果。 我的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'");
例如,我選擇的預算字段=20。因此,我的查詢應該是tutor_signup_form
僅乘積3個結果,但它會產生24個結果。 我不明白為什么會產生24個結果。 你能修好它嗎 ?
更新:
正如戴德曼所說,笛卡爾式...
您的第一個內部聯接是表名稱的副本/粘貼
INNER JOIN tutor_signup_edu_psle
ON tutor_signup_form.tutor_id = tutor_signup_form.tutor_id
本來應該
INNER JOIN tutor_signup_edu_psle
ON tutor_signup_form.tutor_id = tutor_signup_edu_psle.tutor_id
我沒有讀過去,但與此同時
此外,您所有的聯接都為“內部聯接”。 如果某人在其中一個表中沒有記錄(例如音樂),但是在計算機中進行了輔導,並且有人在搜索計算機,則不會返回這些記錄。 我建議所有人員都改為LEFT JOIN,因此,如果該記錄存在於補習子公司級別,那么您會很好,並且不會失去它。
如果我做對了,則需要檢查您的where子句。我認為聯接所涉及的表的笛卡爾積。 笛卡爾乘積結果集的大小是第一個表中的行數乘以第二個表中的行數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.