Перейти к содержимому



Обращение к разным таблицам из базы

#1 Kuchuluk

Kuchuluk
  • Пользователь
  • 315 сообщений
  • Репутация: 5
0

Отправлено 29 Январь 2012 - 13:23

Если я хочу разместить на небольшом участке веб-страницы тексты из разных таблиц БД, то для этого нужно каждый раз новый запрос к БД делать? Или можно как-то по другому? Если не затруднит напишите какой-нибудь код для примера.

 

 

  • 0

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 29 Январь 2012 - 16:30

Да, в большинстве случаев 1 таблица = 1 запрос. В зависимости от задачи можно объединять данные из различных таблиц в одном запросе, но пока что не стоит забивать себе этим голову... лучше доведите до автоматизма работу с простыми вещами.
  • 0


#3 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 29 Январь 2012 - 18:46

SELECT * FROM table1,table2 WHERE table1.name='vasya' AND table2.firstname='pupkin';
таким способом пристыковки можно?
  • 0

#4 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 29 Январь 2012 - 19:32

А попробовать? В том же phpMyAdmin есть вкладка SQL, где можно ввести любой запрос и получить результат. Так делать можно, но именно так делать - неправильно. Объединение таблиц правильно производить по внешнему ключу, получая при этом результирующую таблицу со связанными данными, а не по абсолютно разным значениям ("vasya" и "pupkin").
  • 0


#5 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 29 Январь 2012 - 19:48

Объединение таблиц правильно производить по внешнему ключу, получая при этом результирующую таблицу со связанными данными,

и эту результирующую таблицу тоже заносить в БД?
  • 0

#6 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 29 Январь 2012 - 21:07

Kuchuluk,
зачем результирующую таблицу заносить в БД? Просто будете использовать результат объединения в своих запросах.
Почитайте, должно помочь: http://ru.wikipedia....wiki/Join_(SQL)


  • 0

#7 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 29 Январь 2012 - 22:04

и эту результирующую таблицу тоже заносить в БД?

Под результирующей таблицей имеется в виду результат, получаемый от сервера БД на Ваш запрос... этот результат ведь также представлен в табличном виде. Ну а заносить его в БД зачем? Вы ведь, получая комментарии к статье для вывода их на сайт, не вносите их в БД...
  • 0


#8 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 29 Январь 2012 - 22:22

yury, matroskin8, спасибо, я понял. результирующюю таблицу нужно получать, чтобы впоследствии с ней работать. Но я имел в виду не совсем это ;) Я имел в виду вот что: например на страницу нужно вывести автора книги, ее название, краткое описание и жанр, к которому она относится. Автор находится в одной таблице, название и краткое описание в другой и жанр в третьей. И вот чтобы их вывести рядом друг с другом, как это реализовывается? Делается три запроса к базе данных и потом они через оператор printf выводятся что-ли?
  • 0

#9 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 30 Январь 2012 - 00:24

Пока Вы только учитесь - можно сделать и 3 запроса. А вообще это делается одним запросом, объединяющим записи нескольких таблиц. Здесь главное правильно спроектировать БД, чтобы прослеживались связи объединяемых таблиц. Вот, к примеру, 2 таблицы из Вашего вопроса:
таблица books:
id | name | genre
1 | Книга 1 | 1
2 | Книга 2 | 2
3 | Книга 3 | 1
4 | Книга 4 | 1
Здесь содержится название книги и ее жанр. Но жанр представлен числовым типом. Данным полем эта таблица ссылается на так называемый справочник, в котором содержится список жанров. Эта связь может быть использована для создания внешнего ключа с целью поддержания справочной целостности.
Вторая таблица genre:
id | genre
1 | Детектив
2 | Приключения
Теперь объединяем обе таблицы. Способ 1:
SELECT books.id, books.name, genre.genre FROM books, genre WHERE books.genre = genre.id

Результат:
id | name | genre
1 | Книга 1 | Детектив
2 | Книга 2 | Приключения
3 | Книга 3 | Детектив
4 | Книга 4 | Детектив
Способ 2:
SELECT * FROM books JOIN genre ON books.genre = genre.id

Результат:
id | name | genre | id | genre
1 | Книга 1 | 1 | 1 | Детектив
2 | Книга 2 | 2 | 2 | Приключения
3 | Книга 3 | 1 | 1 | Детектив
4 | Книга 4 | 1 | 1 | Детектив
В общем, где-то так... мой Вам совет - прежде, чем углубляться в "дебри" языка SQL, все же освойте простейшее, а уж затем почитайте какую-нибудь книжку по языку запросов... например, могу порекомендовать Мартина Грабера.
  • 0


#10 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 30 Январь 2012 - 04:41

matroskin8, спасибо, попробую ;)

мой Вам совет - прежде, чем углубляться в "дебри" языка SQL, все же освойте простейшее, а уж затем почитайте какую-нибудь книжку по языку запросов... например, могу порекомендовать Мартина Грабера.

просто мне это уже сейчас нужно реализовывать.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru