2014-08-25 3 views
0

Я таблица MySQL называется tutor_signup_form это посмотреть, как этотSql Регистрация запросы Issue

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. Так что мой запрос должен быть продукт только 3 результатов от tutor_signup_form но производят 24 результатов. Я не понимаю, почему это результат 24. Ты можешь починить это ?

Update:

enter image description here

+1

В (очень важно) в сторону; вы действительно должны прочитать нормализацию базы данных ... – Sherlock

+2

@ Шерлок в этом случае Я думаю, что это основное дело не «в сторону» :) – Zentoaku

+0

Самая большая «INNER JOIN», которую я даже видел. Вы должны предложить щедрость для этого:) – hex494D49

ответ

1

Как уже упоминалось Deadman, декартово ...

Ваш первый внутреннее соединение было копирование/вставка имен таблиц

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  

Я не читал, что прошлое, но в среднем-т ime

Кроме того, у вас есть все ваши соединения как INNER JOINs. Если у кого-то нет записи в одной из таблиц (например, «Музыка»), но она работает в «Компьютеры», а кто-то ищет компьютеры, они не будут возвращены. Я предлагаю перейти на LEFT JOIN для всех из них, поэтому, если запись существует на уровне вспомогательного обучения, вы хороши и не потеряете ее.

+0

Oh! Потрясающие. Я был слепым! Большое спасибо! – Shibbir

+1

@Shibbir, см. Пересмотренный ответ относительно левого и внутреннего соединения. – DRapp

+0

Еще одно замечательное предложение. Ты Рок.Мне нужно подробно изучить php и mysql. – Shibbir

0

Если у меня есть это право вам нужно проверить, где clause.i думать декартово произведение таблиц, участвующих в соединении. Размер декартовой результирующего набора продуктов является количество строк в первой таблице, умноженному на число строк во второй таблице

+0

Не понимаю – Shibbir

Смежные вопросы