Помогите с запросом выбора из двух таблиц

golos81

Новичок
Помогите с запросом выбора из двух таблиц

Есть две таблицы:
в одной объявления, где указаны название фирмы, телефон с кодом города и факс с кодом города. В этой таблице вместо кодов телефона и факса стоят id из второй таблицы - где указаны собственно сами коды городов.

Как выбрать код города и для телефона и для факса?

Вот так получается только для телефона:
PHP:
SELECT 
`firm`.`name`, `firm`.`phonecode`, `firm`.`phone`, `firm`.`faxcode`, `firm`.`fax`, `pcode`.`code` 
FROM 
`firm`, `pcode`
WHERE 
`firm`.`phonecode`=`pcode`.`id`
AND `firm`.`id`='2310'
Если добавляю в условие строчку and `firm`.`faxcode`=`pcode`.`id` то не выводит вообще ничего.
 

zerkms

TDD infected
Команда форума
В этой таблице вместо кодов телефона и факса стоят id из второй таблицы
т.е. в первой таблице 2 поля всегда одинаковы и всегда равны id из второй таблицы?
 

golos81

Новичок
Автор оригинала: zerkms
т.е. в первой таблице 2 поля всегда одинаковы и всегда равны id из второй таблицы?
Теоретически они могут разделятся, а практически наверное код будет одинаковый...:rolleyes:
 

zerkms

TDD infected
Команда форума
Теоретически они могут разделятся
если они будут разные, тогда условие `firm`.`phonecode`=`pcode`.`id` and `firm`.`faxcode`=`pcode`.`id` никогда не выполнится
а если всегда одинаковые - то нужно убрать одно из полей.
как определишься что у тебя есть и что тебе нужно сделать в действительности - возвращайся с уточнениями.
 

golos81

Новичок
Автор оригинала: zerkms
если они будут разные, тогда условие `firm`.`phonecode`=`pcode`.`id` and `firm`.`faxcode`=`pcode`.`id` никогда не выполнится
а если всегда одинаковые - то нужно убрать одно из полей.
как определишься что у тебя есть и что тебе нужно сделать в действительности - возвращайся с уточнениями.
А почему не выполнится? Например, код факса 495, код телефона 499.

-~{}~ 04.05.09 18:37:

Автор оригинала: Dl
LEFT JOIN
А чем это будет отличаться от предложенного решения?
 

Dl

Новичок
А почему не выполнится? Например, код факса 495, код телефона 499.
То есть `pcode`.`id` может принимать одновременно значения 495 и 499?
А чем это будет отличаться от предложенного решения?
Мой вариант - это один джойн для кода телефона и другой - для кода факса
 

golos81

Новичок
Dl, спасибо, идеи понял.

1. А как используя LEFT JOIN выбрать не id из соседней таблицы, а название? Т.е. таблица кодов телефонов содержит id, и расшифровку (1-495, 2-499 и т.д.), а в таблице фирм указывается 1, 2 и т.д. вместо 495...
Так вот, когда делаю такой запрос:
SELECT
`firm`.`name`, `firm`.`phonecode`, `firm`.`phone` FROM `firm`
LEFT JOIN `pcode` ON `firm`.`phonecode`=`pcode`.`id`
WHERE `firm`.`id`='354'
Выбирается код телефона, но не 495, а 1. Как используя LEFT JOIN получить 495?

2. И сразу попутный вопрос: если в таблице firm у некоторых полей, по которым будет происходить связь с другими таблицами, будет в качестве значения 0 или Null, то вся запись из таблицы firm выбираться не будет. Можно ли это как-то обойти, т.е. запись из таблицы firm все равно выбрать, хоть и с пустыми значениями в некоторых полях?
 

Beavis

Banned
Автор оригинала: golos81
2. И сразу попутный вопрос: если в таблице firm у некоторых полей, по которым будет происходить связь с другими таблицами, будет в качестве значения 0 или Null, то вся запись из таблицы firm выбираться не будет. Можно ли это как-то обойти, т.е. запись из таблицы firm все равно выбрать, хоть и с пустыми значениями в некоторых полях?
LEFT JOIN
 

Beavis

Banned
а я уж боялся что придется ещё раз ответить "LEFT JOIN" на твой следующий вопрос)))
 
Сверху