2015-03-02 3 views
1

Когда я выполняю эти запросы отдельно, я получаю результаты ниже $sql1->first 2 колонки, $sql2->second 2 колонны:Mysql Query, сравнивающие таблицы reseults

$userid='AD0004'; 
$comp_code='AD'; 

$sql1 = "SELECT DISTINCT CCCOMPANY, CCCNTY 
     FROM D.TMTBCNTC 
     WHERE CCCOMPANY='$comp_code'"; 

// //gets USER & their counties 
$sql2 = "SELECT DISTINCT UCCOMPANY, UCCNTY 
     FROM D.TMTBCNTU 
     WHERE UCUSERID='$userid' 
     AND UCCOMPANY='$comp_code'"; 

CCCOMPANY CCCNTY UCCNTY UCCOMPANY 
AD  AT    
AD  BB  BB  AD 
AD  BE  BE  AD 
AD  BR  BR  AD 
AD  CM  CM  AD 
AD  CO  CO  AD 
AD  DE  DE  AD 
AD  EB  EB  AD 
AD  EP  EP  AD 
AD  FB  FB  AD 
AD  GB    
AD  GU  GU  AD 
AD  GV  GV  AD 
AD  HA  HA  AD 
AD  KF  KF  AD 
AD  KN  KN  AD 
AD  MB  MB  AD 
AD  MG  MG  AD 
AD  PF  PF  AD 
AD  TA  TA  AD 
AD  UB  UB  AD 
AD  WI  WI  AD 

То, что я хочу сделать, это присоединиться столбцы CCCOMPANY=UCCOMPANY && CCCNTY=UCCNTY, а также вернуть пустые поля, когда нет совпадения.

Проблема, с которой я сталкиваюсь, заключается в том, что запрос, кажется, проходит через себя, что означает, что я получаю 22 округа для каждой компании и 20 стран на пользователя, что получается до 20x22 => 440 результатов, я хочу 22 результата и один запрос.

edit1:

$sql = " 
SELECT DISTINCT c_t.CCCOMPANY, c_t.CCCNTY, (
CASE WHEN u_t.UCUSERID='$userid' 
THEN 'exists here' 
END 
) AS UserOnSite 
FROM D.TMTBCNTC as c_t 
LEFT JOIN D.TMTBCNTU AS u_t ON u_t.UCCOMPANY = c_t.CCCOMPANY 
WHERE c_t.CCCOMPANY = '$comp_code'"; 

Выход:

AD | AT | 
    AD | BB | 
    AD | BE | 
    AD | BR | 
    AD | CM | 
    AD | CO | 
    AD | DE | 
    AD | EB | 
    AD | EP | 
    AD | FB | 
    AD | GB | 
    AD | GU | 
    AD | GV | 
    AD | HA | 
    AD | KF | 
    AD | KN | 
    AD | MB | 
    AD | MG | 
    AD | PF | 
    AD | TA | 
    AD | UB | 
    AD | WI | 
    AD | AT | exists here 
    AD | BB | exists here 
    AD | BE | exists here 
    AD | BR | exists here 
    AD | CM | exists here 
    AD | CO | exists here 
    AD | DE | exists here 
    AD | EB | exists here 
    AD | EP | exists here 
    AD | FB | exists here 
    AD | GB | exists here 
    AD | GU | exists here 
    AD | GV | exists here 
    AD | HA | exists here 
    AD | KF | exists here 
    AD | KN | exists here 
    AD | MB | exists here 
    AD | MG | exists here 
    AD | PF | exists here 
    AD | TA | exists here 
    AD | UB | exists here 
    AD | WI | exists here 

EDIT2:

$sql = " 
SELECT DISTINCT c_t.CCCOMPANY, c_t.CCCNTY, (
    CASE WHEN u_t.UCUSERID='$userid' 
    THEN 'exists here' 
    END 
    ) AS UserOnSite 
FROM D.TMTBCNTC as c_t 
LEFT JOIN D.TMTBCNTU 
    AS u_t 
    ON u_t.UCCOMPANY = c_t.CCCOMPANY 
WHERE c_t.CCCOMPANY = '$comp_code' 
    AND u_t.UCCNTY = c_t.CCCNTY"; 


    AD | AT | 
    AD | BB | exists here 
    AD | BB | 
    AD | BE | exists here 
    AD | BE | 
    AD | BR | exists here 
    AD | BR | 
    AD | CM | exists here 
    AD | CM | 
    AD | CO | exists here 
    AD | CO | 
    AD | DE | exists here 
    AD | DE | 
    AD | EB | exists here 
    AD | EB | 
    AD | EP | exists here 
    AD | EP | 
    AD | FB | exists here 
    AD | FB | 
    AD | GB | 
    AD | GU | exists here 
    AD | GU | 
    AD | GV | exists here 
    AD | GV | 
    AD | HA | exists here 
    AD | HA | 
    AD | KF | exists here 
    AD | KF | 
    AD | KN | exists here 
    AD | KN | 
    AD | MB | exists here 
    AD | MB | 
    AD | MG | exists here 
    AD | MG | 
    AD | PF | exists here 
    AD | PF | 
    AD | TA | exists here 
    AD | TA | 
    AD | UB | exists here 
    AD | UB | 
    AD | WI | exists here 
    AD | WI | 
+0

второй результат не плохой, не знаю, почему ваш сервер кидает 2 Рез ным, если пользователь существует ... –

+0

Я предполагаю, что его из-за его iSeries –

ответ

0

Попробуйте этот запрос:

$sql = " 
SELECT DISTINCT c_t.CCCOMPANY, c_t.CCCNTY, (
CASE WHEN u_t.UCUSERID='$userid' 
THEN 'exists here' 
END 
) AS UserOnSite 
FROM D.TMTBCNTC as c_t 
LEFT JOIN D.TMTBCNTU AS u_t ON u_t.UCCOMPANY = c_t.CCCOMPANY 
WHERE c_t.CCCOMPANY = '$comp_code' 
AND u_t.UCCNTY = c_t.CCCNTY "; // additional where clause 

Вы именование столбцов и таблиц на самом деле не делает его легче .. Но это должно дать вам результат, который вы ищете

Это должен выход следующим образом:

CCCOMPANY CCCNTY UserOnSite 
AD  | AT | NULL    
AD  | BB | exist here 
AD  | BE | exist here 
AD  | BR | exist here 
AD  | CM | exist here 
AD  | CO | exist here 
AD  | DE | exist here 
AD  | EB | exist here 
AD  | EP | exist here 
AD  | FB | exist here 

Вторую попытку лучше: Под редакцией

$sql = " 
SELECT DISTINCT c.CCCOMPANY, c.CCCNTY, (
SELECT (
    CASE WHEN u.UCUSERID='$userid' 
    THEN 'exists here' 
    END 
) 
FROM D.TMTBCNTU as u 
WHERE u.UCUSERID = '$userid' 
AND u.UCCOMPANY = c.CCCOMPANY 
AND u.UCCNTY = c.CCCNTY 
LIMIT 1 
) AS UserOnSite 
FROM D.TMTBCNTC AS c 
WHERE c.CCCOMPANY = '$comp_code'"; 

Это должно работать лучше

+0

Thats close, но он дважды печатает список компаний, не включает результаты пользователя. Это старая база данных, у меня нет выбора в именах столбцов и таблиц. –

+0

Покажите мне результат, который он выдает и что вам нужно. –

+0

Когда я запускаю свой второй запрос, я получаю следующее: Предупреждение: db2_fetch_array(): Fetch Failure в –

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