|
|
|
| Люди добрые, помогите пожалуйста. Ночь не спал, сил нет думать. Есть у меня 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, соответственно.
Заранее благодарен... | |
|
|
|
|
|
|
|
для: newProgrammer
(03.03.2009 в 13:08)
| | >из них скриптом автоматически создается 3 таблица:
это плохая идея.
Число столбцов SQL-таблицы не должно зависеть то количества элементов в чем-либо. | |
|
|
|
|
|
|
|
для: 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 работ).
Но мне эта идея как-то не приглянулась.
Как, по Вашему, будет лучше? | |
|
|
|
|
|
|
|
для: newProgrammer
(03.03.2009 в 17:24)
| | Будет лучше сделать в таблице всего два столбца id_person, id_job
И добавлять в таблицу строку с этими двумя полями, когда указанный человек выполнит указанную работу.
Если хотите иметь данные не только о выполненных работах, но и о запланированных, добавьте еще один столбец done, в котором ставьте 0 / 1 | |
|
|
|
|
|
|
|
для: Trianon
(03.03.2009 в 18:35)
| | А ничего, что значения в id_person и id_job будут повторяться, в случае если один человек выполнит несколько работ или когда одну работу выполнят два человека или и то и другое? | |
|
|
|
|
|
|
|
для: newProgrammer
(04.03.2009 в 15:59)
| | В каком смысле - ничего?
У Вас одна строчка будет соответствовать одной работе.
Можете даже составной первичный ключ создать на этих двух полях. | |
|
|
|