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

Форум MySQL

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

 

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

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

тема: Запрос с 2х таблиц.
 
 автор: bekass   (28.08.2008 в 11:20)   письмо автору
 
 

Подскажите, пжлста.
Есть 2 таблицы одна основная с полями id,f,b,c,d другая с полями id,f,b,c,d но в полях содержит значения 0 или 1 id основной = id вспомогательной.
Так вот в чем вопрос ....
необходимо из основной таблицы вывести все записи которые в вспомогательной = 1.
Может подскажет кто , как это сделать ?

  Ответить  
 
 автор: Trianon   (28.08.2008 в 11:27)   письмо автору
 
   для: bekass   (28.08.2008 в 11:20)
 

пример?

И указывайте названия таблиц.

  Ответить  
 
 автор: Bekass   (28.08.2008 в 11:32)   письмо автору
 
   для: Trianon   (28.08.2008 в 11:27)
 

пример
в основной таблице
id =102
a = "Владимир"
b = "Иванов"
c = "Сергеевич"

в спомогательной

id =102
a = 1
b = 0
c = 1

нужно чтобы запрос выдал данные
"Владимир" Сергеевич"

  Ответить  
 
 автор: Trianon   (28.08.2008 в 11:39)   письмо автору
 
   для: Bekass   (28.08.2008 в 11:32)
 


SELECT 
    CONCAT(
       '', IF(s.a, p.a, '')
     ,' ', IF(s.b, p.b, '')
     ,' ', IF(s.c, p.c, '')
    ) AS res
  FROM `primtable` p
    JOIN `secondtable` s USING(id)

  Ответить  
 
 автор: Bekass   (28.08.2008 в 12:19)   письмо автору
 
   для: Trianon   (28.08.2008 в 11:39)
 

Дело в то что полей a,d,c... z довольно много (штук 20), поэтому IF(s.a, p.a, '') для каждого поля довольно трудоемко, может какой-то другой путь естб, учитывая что имена полей в основной и вспомогательной одинаковы.

  Ответить  
 
 автор: Trianon   (28.08.2008 в 12:21)   письмо автору
 
   для: Bekass   (28.08.2008 в 12:19)
 

данные в таблицах не хранят в горизонталь. Это не эксель-файл.
Вы криво спроектировали БД - теперь расхлебывайте.

>поэтому IF(s.a, p.a, '') для каждого поля довольно трудоемко,

для Вашего случая - вполне малая цена.

  Ответить  
 
 автор: Bekass   (28.08.2008 в 12:37)   письмо автору
 
   для: Trianon   (28.08.2008 в 12:21)
 

А не могли бы Вы посоветовать, как для такого случая удобнее было бы спроектировать БД?

  Ответить  
 
 автор: Trianon   (28.08.2008 в 12:54)   письмо автору
 
   для: Bekass   (28.08.2008 в 12:37)
 

table main( id, .....)
101 ...
102 ...
103 ...


table opts(id, optname)
1 Имя
2 Фамилия 
3 Отчество


table optval(id, main_id, opt_id, opt_val)
150 102 1 'Владимир'
151 102 2 'Иванов'
152 102 3 'Сергеевич'

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

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