2016-08-01 1 views
0

Вот 3 MySQL формат таблицы:Как искать данные из внешней таблицы с помощью php и mysql?

project_status

psid p_id cdid sid short_list res_sent 
1  3  112 24 0   0 
2  3  113 25 0   1 
3  4  114 22 0   1 
4  4  115 23 1   0 
5  5  116 26 0   0 

contact_details:

cdid family_name given_name  department  title cid 
112 xx    xx    xx    xx  1 
113 xx    xx    xx    xx  2 
114 xx    xx    xx    xx  3 
115 xx    xx    xx    xx  4 
116 xx    xx    xx    xx  5 

компании:

cid company_name 
1  xx 
2  xx 
3  xx 
4  xx 
5  xx 

Теперь мне нужно искать cdid из project_status таблицы на основе p_id и sid показать family_name, given_name, department, title

Так что я использую следующий запрос, и я получаю 3 результаты

SELECT 
    cd.family_name, 
    cd.given_name, 
    cd.department, 
    cd.title, 
    cd.cid, 
    ps.*, company.company_name 
FROM 
    contact_details AS cd 
LEFT JOIN project_status AS ps ON cd.cdid = ps.cdid 
LEFT JOIN company ON company.cid = cd.cid 
WHERE 
    1 = 1 
AND ps.sid IN (25, 22) 
AND ps.p_id = '3' 
ORDER BY 
    company.company_name ASC 

СЕЙЧАС раз хочу для поиска по последние данные с результатами (было 3 результатов) на основании фамилия, имя, отчество строка поиска

Для этого я использую следующий запрос:

SELECT 
    cd.family_name, 
    cd.given_name, 
    cd.department, 
    cd.title, 
    cd.cid, 
    ps.*, company.company_name 
FROM 
    contact_details AS cd 
LEFT JOIN project_status AS ps ON cd.cdid = ps.cdid 
LEFT JOIN company ON company.cid = cd.cid 
WHERE 
    1 = 1 
AND ps.sid IN (25, 22) 
AND company.company_name LIKE '%ab%' 
OR cd.family_name LIKE '%ab%' 
OR cd.given_name LIKE '%ab%' 
AND ps.p_id = '3' 
GROUP BY 
    cd.cdid 
ORDER BY 
    company.company_name ASC 

Теперь это не должно показать мне более, что 3 результат, потому что у меня есть 3 результат, показанный на моем первом запросе. НО, к сожалению, показывают мне более 3 результатов contact_details table

+1

Почему 'WHERE 1 = 1 ', что делает, что добавить к партии – RiggsFolly

+1

Оберните' OR' положения в '()' в противном случае они будут просто привести к путанице В настоящее время Тэй расширяют ваши критерии поиска за то, что вы думаете – RiggsFolly

+0

@Avishek На самом деле не имеет значения – RiggsFolly

ответ

1

Попробуйте изменить последнюю часть SQL:

SELECT 
cd.family_name, 
cd.given_name, 
cd.department, 
cd.title, 
cd.cid, 
ps.*, 
company.company_name 
FROM contact_details AS cd 
LEFT JOIN project_status AS ps ON cd.cdid = ps.cdid 
LEFT JOIN company ON company.cid = cd.cid 
WHERE ps.sid IN (25, 22) 
AND (company.company_name LIKE '%ab%' 
    OR cd.family_name LIKE '%ab%' 
    OR cd.given_name LIKE '%ab%') 
AND ps.p_id = '3' 
GROUP BY cd.cdid 
ORDER BY company.company_name ASC 
+0

Позвольте мне попробовать. –

+0

, поэтому мне нужно добавить просто '()' right? –

+1

Да .. Кажется, это работает :) –

0

Вашей ИЛИ оговорка expaning ваших критериев также за то, что вы думаете

Я думаю, что это, вероятно, что вы Мент указать, его немного догадки, хотя

SELECT 
    cd.family_name, 
    cd.given_name, 
    cd.department, 
    cd.title, 
    cd.cid, 
    ps.*, company.company_name 
FROM 
    contact_details AS cd 
LEFT JOIN project_status AS ps ON cd.cdid = ps.cdid 
LEFT JOIN company ON company.cid = cd.cid 
WHERE ps.sid IN (25, 22) 
AND company.company_name LIKE '%ab%' 
AND (cd.family_name LIKE '%ab%' OR cd.given_name LIKE '%ab%') 
AND ps.p_id = '3' 
GROUP BY 
    cd.cdid 
ORDER BY 
    company.company_name ASC 

1=1 является совершенно ненужным и

0
SELECT cd.family_name, cd.given_name, cd.department, cd.title, cd.cid, ps.*, company.company_name 
    FROM contact_details AS cd 
    INNER JOIN project_status AS ps ON cd.cdid = ps.cdid 
    INNER JOIN company ON company.cid = cd.cid 
    WHERE ps.sid IN (25,22) AND ps.p_id = '3' 
    AND (company.company_name LIKE '%ab%' OR cd.family_name LIKE '%ab%' OR cd.given_name LIKE '%ab%') 

    ORDER BY company.company_name ASC 
Смежные вопросы