2014-02-06 3 views
0

Я работаю над базой данных для моего клиента и на одной из страниц (написанной на PHP и HTML), мне нужно отобразить всю информацию о своих клиентах, но когда я запускаю следующий запрос (Предположим, чтобы выбрать все строки в «семействах» таблицы), он возвращает всего 0 строк. Когда он должен вернуть все строки в таблицеSQL Query не возвращает заданные значения

SELECT 
families.id AS fam_id, 
families.last_name AS fam_surname, 
families.address_1 AS fam_address_1, 
families.address_2 AS fam_address_2, 
families.city_id AS fam_city, 
families.phone AS fam_phone, 
families.mobile AS fam_mobile, 
families.email AS fam_email, 
families.f_d_worker_1 AS fam_fdw_1, 
families.f_d_worker_2 AS fam_fdw_2, 
families.status_id AS fam_status_id, 
families.trans_date AS fam_trans_date, 
families.entry_date AS fam_entry_date, 
families.exit_date AS fam_exit_date, 
families.eligible_date AS fam_eligible_date, 
families.active_date AS fam_active_date, 
families.lga_loc_id AS fam_lga_id, 
families.facs_loc_id AS fam_facs_id, 
families.ind_status_id AS fam_indig_id, 
families.referral_id AS fam_ref_id, 
families.active_status AS fam_act_status, 
families.comm_org_id AS fam_com_org, 
city.id AS city_id, 
city.name AS city_name, 
city.state_id AS city_state, 
city.post_code AS post_code, 
states.id AS state_id, 
states.long_name AS state_name, 
states.abbrev AS state_abbrev, 
client_status.id AS client_stat_id, 
client_status.name AS client_stat_name, 
community_org.id AS com_org_id, 
community_org.name AS com_org_name, 
facs_location.id AS facs_id, 
facs_location.name AS facs_name, 
lga_location.id AS lga_id, 
lga_location.name as lga_name, 
indig_status.id AS indig_id, 
indig_status.name AS indig_name, 
referrals.id AS ref_id, 
referrals.name AS ref_name, 
f_d_workers.id AS fdw_id, 
f_d_workers.first_name AS fdw_first_name, 
f_d_workers.last_name AS fdw_last_name, 
client_status.id AS client_id, 
client_status.name AS client_name 
FROM 
`families`, 
`city`, 
`client_status`, 
`community_org`, 
`facs_location`, 
`f_d_workers`, 
`indig_status`, 
`lga_location`, 
`referrals`, 
`states` 
WHERE 
families.city_id = city.id AND 
families.f_d_worker_1 = f_d_workers.id AND 
families.f_d_worker_2 = f_d_workers.id AND 
families.status_id = client_status.id AND 
families.lga_loc_id = lga_location.id AND 
families.facs_loc_id = facs_location.id AND 
families.ind_status_id = indig_status.id AND 
families.referral_id = referrals.id AND 
families.comm_org_id = community_org.id 
+0

Вы действительно должны использовать 'INNER JOIN' для этого ... – hichris123

+0

@ hichris123 У меня нет опыта работы с функцией INNER JOIN, и с небольшим исследованием я не считаю это подходящим для моей ситуации. Не могли бы вы рассказать о том, как это можно использовать? –

ответ

1

Не видя вашу схему или данные, я собираюсь предположить, что один или несколько объединений в запросе не работает так, как вы думаете, идти на работу. Например, запрос подразумевает, что в каждой записи семейства будут иметь ненулевые значения для city_id, f_d_worker_1, f_d_worker_2, status_id, lga_loc_id, facs_loc_id, ind_status_id, referral_id и comm_org_id. Если запись семейств имеет значения для каждого из этих полей, то, по-видимому, не существует соответствующего поля идентификатора в одной или нескольких соответствующих таблицах (city, f_d_workers, client_status, lga_locations, facs_locations, indig_status, referrals, community_org).

Первый шаг, который я обычно использую, когда сложный запрос не работает так, как я думаю, он должен работать, это преобразовать внутренние соединения в внешние соединения, а затем просто искать отсутствующие записи.

Если, с другой стороны, один или несколько элементов соединения являются необязательными (т. Е. Не может быть идентификатор f_d_worker_2), тогда вы должны использовать внешние соединения в самом запросе. Надеюсь, это поможет.

ОБНОВЛЕНО

SELECT 
families.id AS fam_id, 
families.last_name AS fam_surname, 
families.address_1 AS fam_address_1, 
families.address_2 AS fam_address_2, 
families.city_id AS fam_city, 
families.phone AS fam_phone, 
families.mobile AS fam_mobile, 
families.email AS fam_email, 
families.f_d_worker_1 AS fam_fdw_1, 
families.f_d_worker_2 AS fam_fdw_2, 
families.status_id AS fam_status_id, 
families.trans_date AS fam_trans_date, 
families.entry_date AS fam_entry_date, 
families.exit_date AS fam_exit_date, 
families.eligible_date AS fam_eligible_date, 
families.active_date AS fam_active_date, 
families.lga_loc_id AS fam_lga_id, 
families.facs_loc_id AS fam_facs_id, 
families.ind_status_id AS fam_indig_id, 
families.referral_id AS fam_ref_id, 
families.active_status AS fam_act_status, 
families.comm_org_id AS fam_com_org, 
city.id AS city_id, 
city.name AS city_name, 
city.state_id AS city_state, 
city.post_code AS post_code, 
states.id AS state_id, 
states.long_name AS state_name, 
states.abbrev AS state_abbrev, 
client_status.id AS client_stat_id, 
client_status.name AS client_stat_name, 
community_org.id AS com_org_id, 
community_org.name AS com_org_name, 
facs_location.id AS facs_id, 
facs_location.name AS facs_name, 
lga_location.id AS lga_id, 
lga_location.name as lga_name, 
indig_status.id AS indig_id, 
indig_status.name AS indig_name, 
referrals.id AS ref_id, 
referrals.name AS ref_name, 
workers1.id AS fdw1_id, 
workers1.first_name AS fdw1_first_name, 
workers1.last_name AS fdw1_last_name, 
workers2.id AS fdw2_id, 
workers2.first_name AS fdw2_first_name, 
workers2.last_name AS fdw2_last_name, 
client_status.id AS client_id, 
client_status.name AS client_name 
FROM 
`families` 
LEFT OUTER JOIN `city` ON families.city_id = city.id 
LEFT OUTER JOIN `client_status` ON families.status_id = client_status.id 
LEFT OUTER JOIN `community_org` ON families.comm_org_id = community_org.id 
LEFT OUTER JOIN `facs_location` ON families.facs_loc_id = facs_location.id 
LEFT OUTER JOIN `f_d_workers` AS workers1 ON families.f_d_worker_1 = workers1.id 
LEFT OUTER JOIN `f_d_workers` AS workers2 ON families.f_d_worker_2 = workers2.id 
LEFT OUTER JOIN `indig_status` ON families.ind_status_id = indig_status.id 
LEFT OUTER JOIN `lga_location` ON families.lga_loc_id = lga_location.id 
LEFT OUTER JOIN `referrals` ON families.referral_id = referrals.id 
LEFT OUTER JOIN `states` ON city.state_id = states.id 

Я думаю, что это то, что вы пытаетесь получить в.

+0

Вот SQL-скрипт схемы и запроса. Я надеюсь, что это помогает. У меня довольно хороший опыт работы с SQL, но эти большие запросы, похоже, немного меня отражают. http://sqlfiddle.com/#!2/b48d1 –

+0

Похоже, что вы заполняете нули в записи семейств для города, f_d_worker_1, f_d_worker_2 и т. д. В городах, f_d_workers и т. д. нет соответствующих записей с идентификатором id = 0. Вот почему запрос ничего не возвращает. Если эти значения должны быть необязательными, тогда сделайте объединение внешних соединений, а не внутренних объединений. Если они не являются необязательными, заполняйте запись семейств допустимыми данными (т.е. значениями идентификатора, которые существуют в таблицах поиска). – MichaelMilom

+0

Это перешагнуло мой разум на одном этапе, но у меня нет опыта с различием между внутренним и внешним соединениями, так что это была всего лишь краткая мысль. Я сделаю небольшое исследование и, надеюсь, придумаю правильный запрос :) –

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