Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Взаимодействие таблиц  (Прочитано 13072 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« : 18-08-2007 07:16 » new

Добрый день ...

Допустим у нас есть 2 таблицы и имеем дело в библиотеке. В первой таблице учетные записи пользователей а во второй список доступных книг.

Подскажите как связывать учетную запись и то, какие книги этот пользователь "имеет при себе".
Как я понимаю у каждой книги уникальный id идентификатор и надо в одно из полей пользователя добавлять туда эти id, по которым определять что "имеет пользователь на руках",-но это всё теоритически. На практике просмотрел 4 урока но как такогого решения вопроса не нашел. Нид хелп.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 18-08-2007 07:32 » 

FallenSoul, книга не может находиться у нескольких чел сразу. Логично сделать в таблице книг ссылку на id пользователя.
Код: (SQL)
CREATE TABLE users
(
  user_id INT NOT NULL,
  .....
);

CREATE TABLE books
(
  ....
  user_id INT NOT NULL,
);

SELECT *
FROM books
WHERE user_id = ...;
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 18-08-2007 07:55 » 

Ты не совсем правильно меня понял.

1 таблица. Список учащихся 1го курса "ХХХ" потока.
2 таблица. Список литературы (методических пособий) в библиотеке предназначающихся для студентов 1го курса "ХХХ" потока.

1 таблица.

1. Иванов
2. Петров
3. Сидоров
4. Петренко

2 таблица.

1.Мат анализ
2.Линейная алгебра
3.Дискретная математика
4.С++

------------------------
Вопрос в том как к записи Петрова привязать то что у него на руках мат анализ и лин алгебра, а у иванова только с++,у петренко ничего нет а у сидорого есть все эти 4 методички. ?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 18-08-2007 08:05 » 

Т.е. книги не штучные, а просто список необходимого. Тогда нужна связующая таблица.
Код: (SQL)
CREATE TABLE user_books
(
  user_id INT NOT NULL,
  book_id INT NOT NULL
)

Все зависит от логики.
Например, можно сделать таблицу, связывающую курсы и книги, а в таблице челов указывать курс.  Если каждая книга нужна только на одном курсе, то можно указать курс прямо в таблице книг.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 18-08-2007 12:21 » 

Тоесть в 1й таблице учетные записи- имя,фамилия,курс,специальность.

Код:
1. Иванов Иван 1 курс
2. Петров Петр 1 курс
3. Сидоров Алексей 2 курс

Во 2й таблице список книг- название,для какого курса,для каких специальностей предназначены.

Код:
1. Матан 1 курс 
2. Физика 1 курс
3. Ин.Яз 1 курс
4. ОСИ 2 к урс

А 3я таблица номер студента(уникальный по списку)-1 столбец, а что забивать во второй столбец ?

Код:
№ Книги
 
1 1,3 // Иванов Матан,Ин.Яз
2 2,3,4 // Петров Физика,Ин.Яз,ОСИ
3 1,2,4 // Сидоров Матан,Физика,ОСИ

Как лучше всё таки реализовать? И если так, то каким образом во второй столбец третьей таблицы добавлять номера книг через запятую или пробел?


« Последнее редактирование: 18-08-2007 12:24 от FallenSoul » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 18-08-2007 14:07 » 

Код: (SQL)
CREATE TABLE courses
(
  course_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  course_name VARCHAR(200) NOT NULL
);

CREATE TABLE students
(
  student_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  student_name VARCHAR(200) NOT NULL,
  course_id INT NOT NULL
);

CREATE TABLE books
(
  book_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  book_name VARCHAR(200) NOT NULL,
  course_id INT NOT NULL
);

Выбрать книги
Код: (SQL)
SELECT ...
FROM students AS s, books AS b
WHERE s.course_id = b.course_id
...

Вообще, вопрос не по теме...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 18-08-2007 15:58 » 

Тоесть в 1й таблице учетные записи- имя,фамилия,курс,специальность.

Код:
1. Иванов Иван 1 курс
2. Петров Петр 1 курс
3. Сидоров Алексей 2 курс

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

Мы все учились понемногу... Чему-нибудь и как-нибудь.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 18-08-2007 16:24 » 

Тоесть в 1й таблице учетные записи- имя,фамилия,курс,специальность.

Код:
1. Иванов Иван 1 курс
2. Петров Петр 1 курс
3. Сидоров Алексей 2 курс

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

Это только пример первый попавшийся под руку-главное то как организовать связь в таком случае а значения колонок таблиц другие.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines