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

Форум MySQL

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

 

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

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

тема: Как осуществить многотабличный запрос?
 
 автор: Director_Of_Zoo   (21.02.2007 в 09:19)   письмо автору
 
 

Есть база из 2-х таблиц:
первая tbl1
id int
my_text text
my_opisanie text
my_katalog int

вторая tbl2
id int
katalog_name text
---------------------------------
еид1.my_katalog - поле идентичное полю tbl2.id.
Хочу сделать выборку следующего плана:
поля tbl1.id, tbl1.my_text, tbl1.my_opisanie, tbl2.katalog_name а также, т.е. строки таблицы имеющие одинаковое значение tbl1.my_katalog (если есть 5 строк с tbl1.my_katalog=1, то соответственно получаем 5 ну и т.д).Если в столбце my_katalog отсутствуют записи, присутствующие в tbl2.id аписываем 0.
Сейчас реализовал такую возможность, но 2-мя запросами. Возможно ли осуществить такую выборку за раз? Как я подозреваю возможно через UNION.

   
 
 автор: Trianon   (21.02.2007 в 10:56)   письмо автору
 
   для: Director_Of_Zoo   (21.02.2007 в 09:19)
 

tbl2.katalog_name а также, т.е. строки таблицы
тут явно что-то пропущено.

Вам нужно что-топохожее на

SELECT tbl1.id, my_text, my_opisanie, katalog_name 
  FROM tbl1 LEFT JOIN tbl2 ON my_katalog = tbl2.id

   
 
 автор: Director_Of_Zoo   (21.02.2007 в 20:27)   письмо автору
 
   для: Trianon   (21.02.2007 в 10:56)
 

Та коно так, я такое решение тоже пытался применить, но он возвращает только 1 строку из таблицы tbl2, если в tbl1 одна строка с соответствующим индексом tbl2.id. Может не правильно сформулировал, но мне надо чтоб вернулись все позиции из tbl1 а из второй требуются количество строк, совпадающее по значению (my_katalog = tbl2.id). Если таковых нет - получаем ноль.

   
 
 автор: Trianon   (21.02.2007 в 20:45)   письмо автору
 
   для: Director_Of_Zoo   (21.02.2007 в 20:27)
 


SELECT tbl1.id, my_text, my_opisanie, COUNT(tbl2.id)
  FROM tbl1 LEFT JOIN tbl2 ON my_katalog = tbl2.id 
  GROUP BY tbl1.id 
 

   
 
 автор: Director_Of_Zoo   (21.02.2007 в 21:10)   письмо автору
 
   для: Trianon   (21.02.2007 в 20:45)
 

то что надо.... спасибо Trianon

   
 
 автор: Director_Of_Zoo   (22.02.2007 в 20:12)   письмо автору
 
   для: Trianon   (21.02.2007 в 20:45)
 

и ещё в продолжении темы...
а если в таблице есть поля по которым надо поставить жёсткие условия, например:
tbl2.pole1="yes" и
tbl1.pole2="yes".
У меня получается как то криво то выпадают из таблицы результаты, то вообще одна строчка всего возвращается... поэтому и не привожу свои варианты...

   
 
 автор: Trianon   (22.02.2007 в 20:17)   письмо автору
 
   для: Director_Of_Zoo   (22.02.2007 в 20:12)
 

Вы сказали, что в tbl2 строк может и не быть.
А теперь оказывается, что там непременно должно быть что-то конкретное записано.

   
 
 автор: Director_Of_Zoo   (22.02.2007 в 20:33)   письмо автору
 
   для: Trianon   (22.02.2007 в 20:17)
 

строки могут быть а могут и не быть. Чего тут так вас возмутило. Просто если они есть то хотелось бы отсеять их по критерию что выше.
Добавлено
Нашёл решение сам:

SELECT 
   tbl1.id, 
   my_text, my_opisanie, 
   COUNT(tbl2.id) AS FIELD_1
FROM tbl1 LEFT JOIN tbl2 ON ((my_katalog = tbl2.id) AND (tbl2.pole1="yes") )
WHERE
  tbl1.pole2="yes"
GROUP BY tbl1.id

   
Rambler's Top100
вверх

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