связи таблиц и вывод

Тема в разделе "PHP", создана пользователем danneo, 9 фев 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Никак не могу понять работу связей таблиц.... зачем они и как они работают, особенно когда нужно условие "WHERE"? Какие поля указывать для связей и почему? Помогите разобраться.
    А также, как делать вывод из запроса (нескольких таблиц)... как я понимаю, делается также, как и при обычном запросе... да?
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Да.

    А как без них, если надо выбрать данные из нескольких таблиц?
    Чтоб понять надо читать маны и пробовать руками.http://www.mysql.ru/docs/gruber/mg08.html
    http://www.phpclub.ru/detail/article/2000-12-06
     
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    читал. Только вот про них мало написано и не во всех книгах.
    какие поля нужно приравнивать?
    И как быть, когда в двух таблицах одинаковые поля (имена полей)? как выводить данные?
     
  4. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Ты сам то понял свой вопрос? :D
    Какие тебе нужны по таким и вяжи, здесь телепатов нет.

    Есть названия таблиц, полей и их алиасы.
     
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Я имел в виду, что дает связь для поля, как определить, какое поле связывать, чтобы получить определенный результат (а не то, какие именно у меня поля... в общем имею в виду)?
    По именам: но вывод то данных как писать? например первый массив занес в переменную result1 и вывожу далее result['name'], а это поле name имеет две таблицы. Как правильно писать-то, как скрипт определит какое поле из какой таблицы выводить?
     
  6. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Этого никто не определит кроме тебя (никто не знает структуру таблиц).
    Обычно вяжется по полям общим для каждой таблицы.

    использовать алиасы.
     
  7. black.cat

    black.cat

    Регистр.:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    32
    советую взять какой-то очень простой пример связки двух таблиц - тогда все станет на свои места...
    к примеру есть таблица клиенты:
    ( id - уникальный идентификатор клиента
    name - имя
    addr - почтовый адрес
    )
    и есть таблица заказы:
    ( id - уникальный идентификатор заказа
    klient_id - ссылка на id клиента (это и есть связка)
    zakaz_name - имя заказа
    )

    вот и приспичело нам выбрать все заказы определенного пользователя (классическое желание)
    (болдом выделена часть которая отвечает за так вами называемую связку)
    означает: выбрать все записи из заказов и одну запись заказы.zakaz_name из таблиц ГДЕ id клиента совпадает с klient_id заказа.

    думаю это самый простой вариант. на деле sql запрос выглядит намного больше и непонятнее. Потренироваться можно в php_myadmin.
     
  8. agent_smit

    agent_smit Постоялец

    Регистр.:
    12 дек 2008
    Сообщения:
    60
    Симпатии:
    11
    Я так понял ты не понимаешь зачем нужны таблицы где есть связи?
    Например:

    есть таблица (catalog) где хранится каталог товаров, и там есть поля:
    id - первичный ключ,
    firm - фирма производитель
    name - наименование модели

    например таблица (catalog) содержит такие записи:
    id firm name
    1 Asus Ноутбук Asus бла-бла
    1 Acer Ноутбук Acer бла-бла
    и т.д.

    Допустим в таблице 10 тис. записей.
    И нам надо изменить название фирмы производителя (поле firm) Asus на ASSSus, а в таблице записей с Asus 1 тис., то есть нам надо изменить фирму производителя в 1 тис. записей, что естественно гониво.

    Что такого не было мы создадим еще одну таблицу firms, где будут храниться фирмы производители:
    id - первичный ключ,
    firm - фирма производитель

    , а таблицу каталог изменим (catalog:(
    id - первичный ключ,
    id_firm - id из таблицы firms
    name - наименование модели


    firms:
    id name
    1 Asus
    1 Acer

    catalog:
    id id_firm name
    1 1 Ноутбук Asus бла-бла
    1 2 Ноутбук Acer бла-бла

    Запрос который связывает две таблицы и выводит данный из них:
    select catalog.id, firms.name, catalog.name from catalog,firms where catalog.id_firm = firms.id;

    Кстати в книжках по базам данным это все толково написано.
     
    black.cat нравится это.
  9. WishMaster1234

    WishMaster1234 Писатель

    Регистр.:
    24 фев 2008
    Сообщения:
    9
    Симпатии:
    0
    Учите мат. часть!
    Возмите учебник по БД. Практически в каждом есть объяснения понятия "нормальная форма". Скажу что НФ около 6, щас так не вспомню. Вам, для решения ваших прикладных задач подойдет ЗНФ(третья нормальная форма). Я вам особо объяснять суть не буду, лучше возмите учебник...
     
  10. asterpool

    asterpool Создатель

    Регистр.:
    24 июн 2008
    Сообщения:
    30
    Симпатии:
    1
    поля указываешь те, которые определят какое именно поле из одной таблицы соответсвует полю из другой. например две таблицы - в одной список описаний товаров, в другой список наличия товаров. чтобы получить список описаний и наличия, то объединяй в запросе по уникальному номеру (id) товара.

    ага, именно.
     
Статус темы:
Закрыта.