Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вложенный запрос d where и and
 
 автор: easywind   (13.08.2009 в 23:25)   письмо автору
 
 

Здравствуйте господа!
Помогите пожалуйста.
есть две таблицы
таблица catalog
id_cat - name - firm - id_rub
таблица firm
id_frm -f name
делаю запрос

SELECT * FROM catalog, firm WHERE catalog.firm = firm.id_frm AND catalog.id_rub='3' ORDER BY name

на выходе хочу получить список скажем товара определенной категории (в примере группа 3) с названием фирмы но ничего не показывает :(
делаю

SELECT * FROM catalog, firm WHERE catalog.firm = firm.id_frm ORDER BY name

показывает товар и название фирмы
делаю

SELECT * FROM catalog, firm WHERE catalog.id_rub='3' ORDER BY name

показывает все что есть в группе товара под номером 3, а мне нужно как в первом запросе. Где камень зарыт? или не поддерживает MySQLтакое?

  Ответить  
 
 автор: cheops   (16.08.2009 в 19:52)   письмо автору
 
   для: easywind   (13.08.2009 в 23:25)
 

Многотабличный запрос - это всегда декартово произведение, т.е. было у вас две таблицы, каждая из которых содержит по 10 записей и по 5 столбцов - вы в результате многотабличной выборки получаете одну таблицу из 100 записей и 10 столбцов. Чтобы получить 10 записей и 5 столбцов необходимо группировать значения и явно указывать названия столбцов. Последнее необходимо для того, чтобы предотвратить неоднозначность - у вас в обоих таблицах одинаковое поле - SQL не может выбрать нужное (ваш запрос скорее всего не срабатывает по этой причине). Попробуйте отталкиваться от следующего запроса
SELECT catalog.name AS product, firm.nam AS firmname
FROM catalog, firm
WHERE catalog.firm = firm.id_frm AND
       catalog.id_rub='3'
GROUP BY catalog.id_cat
ORDER BY catalog.name

  Ответить  
 
 автор: easywind   (17.08.2009 в 21:37)   письмо автору
 
   для: cheops   (16.08.2009 в 19:52)
 

>Многотабличный запрос - это всегда декартово произведение, т.е. было у вас две таблицы, каждая из которых содержит по 10 записей и по 5 столбцов - вы в результате многотабличной выборки получаете одну таблицу из 100 записей и 10 столбцов. Чтобы получить 10 записей и 5 столбцов необходимо группировать значения и явно указывать названия столбцов. Последнее необходимо для того, чтобы предотвратить неоднозначность - у вас в обоих таблицах одинаковое поле - SQL не может выбрать нужное (ваш запрос скорее всего не срабатывает по этой причине). Попробуйте отталкиваться от следующего запроса
>
SELECT catalog.name AS product, firm.nam AS firmname
>FROM catalog, firm
>WHERE catalog.firm = firm.id_frm AND
>       catalog.id_rub='3'
>GROUP BY catalog.id_cat
>ORDER BY catalog.name

Что-бы не было путаницы со столбцами у меня каждый столбец (в обоих таблицах) имеет уникальное имя.
Может я не правильно объяснил свою задачу. Мне нужно чтобы вторая таблица использовалась как справочник фирм. В первой таблице присутствует поле firm где имеется цифровое значение скажем "1" которое ссылается на id_frm во второй таблице. при выборе записей в выводе уже выводится не поле firm а fname из второй таблицы. и это работает если не указавать в WHERE дополнительный AND.
с андом никак.

  Ответить  
 
 автор: GeorgeIV   (17.08.2009 в 21:54)   письмо автору
 
   для: easywind   (17.08.2009 в 21:37)
 

id_rub - текстовое или числовое поле?

  Ответить  
 
 автор: easywind   (17.08.2009 в 22:13)   письмо автору
 
   для: GeorgeIV   (17.08.2009 в 21:54)
 

числовое.

  Ответить  
 
 автор: easywind   (17.08.2009 в 22:17)   письмо автору
 
   для: easywind   (17.08.2009 в 22:13)
 

Пардон господа тема закрыта. просто текстовое поле catalog.firm содержало мало цифровых значений (не успел вставить) поэтому и не находило ничего. все очень просто.
Специально для Трианона вот теперь точно кто будет искать похожее он просто найдет ответ. без лишних ломаний головы...

  Ответить  
 
 автор: Trianon   (17.08.2009 в 22:24)   письмо автору
 
   для: easywind   (17.08.2009 в 22:17)
 

Ок. Если кто будет спрашивать, я отвечу: обращайтесь к easywind'у - он вам цифровых значений в таблицу насыпет.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования