1 (изменено: S3Ga, 2013-04-02 19:05:36)

Тема: Помогите новичку

Вообщем вопрос децкий. У меня есть 3 таблицы (Программное обеспечение, вид закупки(поля:продление,закупка), вид лицензии(поля:академ,коммерц)). В таблице Программное обеспечение около 100 записей и есть поля вид закупки и вид лицензии. Каким образом мне вставить в таблицу ПО поля из других таблиц

2

Re: Помогите новичку

Не смог понять задачу. Попробуйте описать пример переноса.

3 (изменено: S3Ga, 2013-04-03 16:04:55)

Re: Помогите новичку

в моей базе данных есть таблицы -Программное обеспечение(ПО) -Вид лицензии(ВЦ) и -Вид закупки(ВЗ). У таблиц ВЦ и ВЗ всего по 2 записи.http://s002.radikal.ru/i199/1304/e0/a14d9ba8a4f6.jpg. Каким образом в phpmyadmin можно делать такие связи?Если нельзя, то как создать эту связь через sql-запросы?

4

Re: Помогите новичку

Добавьте в таблицу ПО поле идентификатора, например id, затем таблицы ВЦ и ВЗ добавьте поле po_id, по которому все таблицы будут связаны.

5 (изменено: S3Ga, 2013-04-04 00:29:44)

Re: Помогите новичку

Т.е если в таблице ПО будет id допустим равное 4, что тогда нужно заполнять в поле po_id. Ведь в ВЗ и ВЦ всего по две записи, а в таблице ПО записей очень много.Говоря проще,как мне реализовать связь между таблицами?

6

Re: Помогите новичку

Тогда надо сделать иначе. Добавьте поле id к таблицам ВЗ и ВЦ, а в таблице ПО добавьте два поля, которые будут связывать их по идентификаторам.

7 (изменено: S3Ga, 2013-04-04 20:47:56)

Re: Помогите новичку

Как я понимаю в phpmyadmin нету графического интерфейса для этих целей,когда можно просто перенести связываемое поле из одной таблицы на связываемое поле в другой
Т.е получается в phpmyadmin в таблице ПО я увижу только идентификаторы, а не текст из таблицы ВЦ и ВЗ,типо этого?:


id | Название | Вид_лицензии | Вид_лицензии
1  |  Mathcad   | 1                      | 2
2   | photoshop | 2                     | 2
получается чтобы мне вывести таблицу в браузер,и чтобы в полях ВЦ и ВЗ не было идентификторов придётся делать так
SELECT *
FROM
  ПО
  INNER JOIN
  ВЦ,
  ВЗ
    ON ПО.Вид_лицензии = ВЛ.id
Поправьте если не прав.

8

Re: Помогите новичку

Для этого есть механизм называемый "Дизайнер связей", страница на него есть при выборе любой базы данных. Для отображения вместо идентификаторов каких-то данных, используется функция "отображаемый столбец", которая и указывает данные из какого столбца должны выводиться вместо идентификатора.

9 (изменено: S3Ga, 2013-04-05 15:37:14)

Re: Помогите новичку

Огромная благодарность за ответы. Получил больше чем ожидал. но возник ещё вопрос,http://rghost.ru/45057289/thumb.png почему не устанавливается связь?появляется пустое всплывающее окно( Тип обоих полей одинаковый, тип таблиц InnoDB

Всё разобрался,просто не добавил индекс

10

Re: Помогите новичку

Вопрос такой, почему когда я пользуюсь функцией, отображаемый столбец, в таблицах всё равно отображается лишь индекс.

11

Re: Помогите новичку

S3Ga сказал:

Вопрос такой, почему когда я пользуюсь функцией, отображаемый столбец, в таблицах всё равно отображается лишь индекс.

Должны выводиться данные выводимого столбца. Попробуйте навести мышку на ссылку с данными.

12

Re: Помогите новичку

При наведении показывается выводимый столбец,но когда вывожу таблицу в браузер,отображаемый столбец не должен быть виден вместо ссылки?

13

Re: Помогите новичку

S3Ga сказал:

При наведении показывается выводимый столбец,но когда вывожу таблицу в браузер,отображаемый столбец не должен быть виден вместо ссылки?

Нет, не должен. Выводом вы управляете самостоятельно. Связь видна только в phpMyAdmin.

14

Re: Помогите новичку

Hanut сказал:
S3Ga сказал:

При наведении показывается выводимый столбец,но когда вывожу таблицу в браузер,отображаемый столбец не должен быть виден вместо ссылки?

Нет, не должен. Выводом вы управляете самостоятельно. Связь видна только в phpMyAdmin.

Большое спасибо

15

Re: Помогите новичку

Хм.А каким образом тогда мне вывести нужные данные не подскажите?

16

Re: Помогите новичку

Всё,разобрался

17

Re: Помогите новичку

S3Ga сказал:

Хм.А каким образом тогда мне вывести нужные данные не подскажите?

Для начала попробуйте сформулировать задачу. Как я понял, вам надо объединить две таблицы и вывести связанные данные, делается это с помощью объединения по ключевому полю.

SELECT * FROM `table1`, `table2`
WHERE `table1`.`id` = `table2`.`parent_id`

Имеем таблицы `table1` (родительская) и `table2` (дочерняя), связываем их по ключу `table1`.`id` = `table2`.`parent_id`. Теперь можно получить доступ ко всем полям обеих таблиц.

18

Re: Помогите новичку

SELECT * FROM `table1`INNER JOIN `table2` ON
 `table1`.`id` = `table2`.`parent_id

А такой вариант может быть?если да,то какой из них более грамотный(производительный)

19

Re: Помогите новичку

S3Ga сказал:

если да,то какой из них более грамотный(производительный)

Оба варианта идентичны.

20

Re: Помогите новичку

"SELECT * FROM `software` 
INNER JOIN `type_license` ON software.id_type_license = type_license.id 
INNER JOIN `type_purchase` ON software.id_type_purchase = type_purchase.id 
INNER JOIN `users` ON software.id_fio_custom = users.id ON software.id_fio_response=users.id

Почему не работает запрос? если убрать последний ON,то запрос выдаёт результат

21

Re: Помогите новичку

Последний ON - это ошибка. Связать таблицы можно только по одному ключу, а вы пытаетесь это сделать сразу по двум id_fio_custom и id_fio_response.

22 (изменено: S3Ga, 2013-04-27 21:09:40)

Re: Помогите новичку

Есть другой вариант как можно выполнить данную задачу?. В главную таблицу 'software' надо вставить 2 поля из таблицы 'users'

23 (изменено: S3Ga, 2013-05-25 13:49:15)

Re: Помогите новичку

нашёл решение

"SELECT * FROM `software`
INNER JOIN `type_license` ON software.id_type_license = type_license.id 
INNER JOIN `type_purchase` ON software.id_type_purchase = type_purchase.id
LEFT JOIN `users` ON software.id_fio_custom = users.id AND software.id_fio_response = users.id WHERE ..."

Вот только теперь проблема с выводом.Вывожу вот так

 echo "<table>" 
 echo "<tr>" 
....
 echo "<td>Заказчик</td>";
 echo "<td>Ответственный</td>";
 echo "<tr>";
 
 while($soft = mysql_fetch_array($result))
  { 
    echo "<tr>";
....
echo "<td>".$soft['surname']."&nbsp;</td>";
echo "Вот тут нужно выводить фамилию ответственного, но как это сделать не знаю. Т.е нужно выводить именно ту фамилию, которая соотвутствует ключу id_fio_response в таблице.

24

Re: Помогите новичку

Ой, похоже я поторопился, выводятся только результаты, у которых совпадают id_fio_custom и id_fio_response

25

Re: Помогите новичку

Похоже нашёл ответ

$q = "SELECT * FROM `software` 
INNER JOIN `type_license` ON software.id_type_license = type_license.id 
INNER JOIN `type_purchase` ON software.id_type_purchase = type_purchase.id
INNER JOIN `users` AS u1 ON software.id_fio_custom = u1.id
INNER JOIN `users` AS u2 ON software.id_fio_response = u2.id"

Но вот вопрос о выводе всё ещё в силе