2013-10-08 2 views
0

Я пытаюсь получить контактную информацию из одной таблицы («SP_Cont»), а затем, основываясь на коде графства (CID), получить фактическое имя графства (" CTitle ") из таблицы« Округа ».Новый запрос в запросе MySql на основе исходного результата запроса

SELECT 
CONCAT_WS(', ',NULLIF(SP_Cont.Address1, ''),NULLIF(SP_Cont.Address2, ''),NULLIF(SP_Cont.Address3, ''),NULLIF(SP_Cont.Address4, ''),NULLIF(SP_Cont.Address5, ''),NULLIF(SP_Cont.City, ''),NULLIF(Postcode, '')) AS Address, SP_Cont.CID, SP_Cont.RevTot, 
Counties.CTitle 
FROM 
    SP_Cont 
INNER JOIN 
    Counties 
ON 
    Counties.CID=SP_Cont.CID 
WHERE 
    SP_Cont.SPCode = "26" 

То, что я хочу достичь, это адрес, который выглядит следующим образом ...

Адрес1, Адрес2, Address3, город, графство, индекс.

Я знаю, что выше, не будет делать это, но, по крайней мере, мне не придется запускать другой запрос в пределах страницы PHP добавить округа в настоящее время я:

if (!empty($BAPrint['CID'])) { 
$CQuery = mysql_query ("SELECT CTitle FROM Counties USE INDEX (CIDT) WHERE CID = ".$BAPrint['CID']); 
    $CPrint = mysql_fetch_array ($CQuery); 
    $Address .= ", ".$CPrint['CTitle']; 
} 

Так будет выглядят так:

Адрес1, Address2, Address3, Город, Почтовый индекс, Графство.

Есть ли способ, чтобы получить желаемый формат адреса

ADDRESS1, ADDRESS2, Address3, города, округа, Почтовый индекс.?

Другая проблема заключается в том, что SP_Cont не содержит кода CID, после чего сбой сценария. Есть ли в любом случае использование CONCAT_WS, если существует NULL CID, сценарий все еще работает, но без названия округа?

Приветствия G

+0

ваш запрос выглядит хорошо, вы можете добавить все необходимые поля CONCAT_WS. ЕСЛИ вы не получите никаких результатов, потому что у вас есть один после применения фильтров. ваши фильтры являются условием внутреннего соединения и где: «Counties.CID = SP_Cont.CID и SP_Cont.SPCode = 26» – AdrianBR

+0

@AdrianBR Вы правы. Я только что использовал SPCode, который, как я знаю, имеет код CID, и он отобразил 1 результат. Проблема, как ясно здесь, если нет кода CID, скрипт не может произвести никакого результата. Есть ли способ concat_ws всех полей, о которых я упоминал выше, даже если код CID пуст/NULL? Приветствую вас за ваш комментарий. – WOWDesign

+0

, если у вас нет кода CID, вы не можете присоединиться к своей таблице графства. Вы можете изменить соединение на левое соединение, поэтому результаты из вашей таблицы SP_CONT будут опубликованы независимо. Кроме того, ifnull, а не nullif – AdrianBR

ответ

0

NULLIF работает несколько иначе http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_nullif

SELECT 
CONCAT_WS(', ', 
    nullif(SP_Cont.Address1, ''), 
    nullif(SP_Cont.Address2, ''), 
    nullif(SP_Cont.Address3, ''), 
    nullif(SP_Cont.Address4, ''), 
    nullif(SP_Cont.Address5, ''), 
    nullif(SP_Cont.City, ''), 
    nullif(Counties.CTitle, '') 
    nullif(Postcode, '') 
) AS Address, 

SP_Cont.CID, SP_Cont.RevTot 


FROM SP_Cont 
LEFT JOIN Counties 
ON Counties.CID=SP_Cont.CID 

WHERE SP_Cont.SPCode = "26" 
+1

Это просто создает что-то вроде этого «Loughborough Sports Club, Moor Lane,,, Loughborough,, LE11 1ST». Дополнительные запятые, где не должно быть. NULLIF удаляет ненужные запятые "Loughborough Sports Club, Moor Lane, Loughborough, LE11 1ST". Получение имени графства в адресной строке является проблемой, hmmmmm – WOWDesign

+0

Я думаю, мне нужно, чтобы кто-то сначала получил код CID, а затем получил Counties.CTitle, а затем запустил CONCAT_WS, включая CTitle. – WOWDesign

+0

CTitle - это имя графства, не так ли? он находится там в запросе выше. – AdrianBR

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