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

Форум MySQL

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

 

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

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

тема: Выборка SELECT (join left) из 2 таблиц
 
 автор: newProgrammer   (03.03.2009 в 13:08)   письмо автору
 
 

Люди добрые, помогите пожалуйста. Ночь не спал, сил нет думать. Есть у меня 2 таблицы:
+------------------------------+
|...................t1....................|
+-------------+---------------+
|........id........|......name.....|
+-------------+---------------+
|.........1........|..the name..|
+------------------------------+ и
+------------------------------+
|..................t2.....................|
+-------------+---------------+
|........id........|........title........|
+-------------+---------------+
|........1.........|....the title.....|
+------------------------------+
из них скриптом автоматически создается 3 таблица:
+----------------------------------------+
|..........................t3..........................| -первый столбец называется t1_id и содержит Primary Key t1.id
+-------------+-------------------------+ т.е. в t3 ровно столько строк сколько их в t2
|.....t1_id.....|....t2_1.....|.....t2_2....| -второй столбец называется t2_id, где t2 - префикс от таблицы t2
+-------------+------------+-----------+ а цифры _1 и _2 соответствуют 1 и 2 в t2.id, т.е. в t3 ровно
|........1.........|.................|................| столько столбцов сколько строк в t2
+---------------------------------------+

Мне нужно сделать выборку из 3 таблицы, но только так чтобы вместо значений t3.t1_id писались соответствующие этим Id имена т.е. вместо 1 - the name, а вместо t2_1 - the title.
Не знаю получилось ли у меня объяснить....

Я выбираю так: SELECT t1.name, t3.t2_1, t3.t2_2, t3.t2_3 FROM t3 LEFT JOIN (t1) ON (t3.t1_id = t1.id) как сделать чтобы наименования столбцов t3.t2_1, t3.t2_2 и t3.t2_3 были t2.title where t2.id = 1, t2.title where t2.id = 2, t2.title where t2.id = 3, соответственно.

Заранее благодарен...

  Ответить  
 
 автор: Trianon   (03.03.2009 в 14:49)   письмо автору
 
   для: newProgrammer   (03.03.2009 в 13:08)
 

>из них скриптом автоматически создается 3 таблица:

это плохая идея.
Число столбцов SQL-таблицы не должно зависеть то количества элементов в чем-либо.

  Ответить  
 
 автор: newProgrammer   (03.03.2009 в 17:24)   письмо автору
 
   для: Trianon   (03.03.2009 в 14:49)
 

Дело в том, что 3 таблица с самого начала имеет 4 столбца, и уже потом при необходимости, вернее по мере пополнения 2 таблицы, добавлять новые столбцы. Так тоже плохо?

Я просто ничего умнее пока не придумал. Задача состоит в следующем: 1 таблица - это люди, 2 таблица - скажем, работы. Так вот нужно сделать 3-ю таблицу, где бы отмечались выполненные работы того или иного человека. Т.е. если работа выполнена UPDATE `table3` SET `job_1` = 1 WHERE `id` = 1, по умолчанию естественно стоит "0". Вот в таком виде:

+-----------------------------------------------+
|.............................table3.........................|
+--------+-----------+------------+-----------+
|...id......|...job_1...|....job_2...|...job_3...|
+--------+-----------+------------+-----------+
|....1......|.......1.......|........0.......|.......0.......|
+--------+-----------+------------+-----------+
|....2......|.......0.......|........1.......|.......1.......|
+--------+-----------+------------+-----------+
|....3......|.......1.......|........0.......|.......1.......|
+-----------------------------------------------+

Была у меня еще одна идея. Сделать в 3-ей таблице всего 2 столбца, в 1-ом записывать id человека, во 2-ом выполненные работы через запятую "job_1, job_2, job_3" или лучше просто "1,2,3" (id работ).
Но мне эта идея как-то не приглянулась.

Как, по Вашему, будет лучше?

  Ответить  
 
 автор: Trianon   (03.03.2009 в 18:35)   письмо автору
 
   для: newProgrammer   (03.03.2009 в 17:24)
 

Будет лучше сделать в таблице всего два столбца id_person, id_job
И добавлять в таблицу строку с этими двумя полями, когда указанный человек выполнит указанную работу.
Если хотите иметь данные не только о выполненных работах, но и о запланированных, добавьте еще один столбец done, в котором ставьте 0 / 1

  Ответить  
 
 автор: newProgrammer   (04.03.2009 в 15:59)   письмо автору
 
   для: Trianon   (03.03.2009 в 18:35)
 

А ничего, что значения в id_person и id_job будут повторяться, в случае если один человек выполнит несколько работ или когда одну работу выполнят два человека или и то и другое?

  Ответить  
 
 автор: Trianon   (04.03.2009 в 17:14)   письмо автору
 
   для: newProgrammer   (04.03.2009 в 15:59)
 

В каком смысле - ничего?
У Вас одна строчка будет соответствовать одной работе.
Можете даже составной первичный ключ создать на этих двух полях.

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

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