За последние 24 часа нас посетили 16647 программистов и 1650 роботов. Сейчас ищут 1786 программистов ...

Связь между двумя таблицами

Тема в разделе "PHP и базы данных", создана пользователем Ігор, 12 сен 2008.

  1. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Подскажите, пожалуйста, саму логику работы.
    Есть в базе (SQLite) , ну скажем, с списком песен

    [sql]album TEXT
    artist TEXT
    songname TEXT
    downlink TEXT[/sql] Ну и дальше.

    И такая таблица с комментариями
    [sql]user TEXT
    data TEXT
    ip TEXT
    coment TEXT [/sql]

    Так вот как они обьединяются? Как, например опредлить, к какой песни какие комментарии оставили?
    Понятия не имею как это решается.
     
  2. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Например так

    Сделай в первой таблице поле id.
    И во второй for_id.

    Далее объединяем две таблицы, примерно так

    [sql]
    SELECT a.*, b.* FROM `spiski_pesen` AS a, `comments` AS b
    WHERE a.id = b.for_id[/sql]
     
  3. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    И такой вопрос. Как сделать более профессионально.
    Есть две таблицы
    [sql]sqlite_exec ($id, "CREATE TABLE albums (id integer primarykey,
    type TEXT,
    artist TEXT,
    album TEXT,
    list TEXT,
    link TEXT,
    size TEXT,
    user TEXT,
    ip TEXT,
    data TEXT,
    deskr TEXT,
    reserv1 TEXT,
    reserv2 TEXT)");

    sqlite_exec ($id, "CREATE TABLE songs (id integer primarykey,
    type TEXT,
    artist TEXT,
    songname TEXT,
    preview TEXT,
    link TEXT,
    size TEXT,
    time TEXT,
    user TEXT,
    ip TEXT,
    data TEXT,
    deskr TEXT,
    reserv1 TEXT,
    reserv2 TEXT)");[/sql]

    Как видно почти все поля [sql].
    .. link TEXT,
    size TEXT,
    time TEXT,
    user TEXT,
    ip TEXT,
    data TEXT...[/sql]
    Одинаковы. Не лучше ли будет вынести их в отдельную таблицу? И потом по for_id определять кто и когда загрузил?

    Потом для type сделать тоже таблицу

    [sql]name_group TEXT,
    data_create Text,
    descr TEXT [/sql]
    Но как связать все до кучи не совсем представляю
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А почему все поля TEXT?
    IP - это MEDIUMINT UNSIGNED,
    DATA - Это DATE или SMALLINT UNSIGNED итд..
     
  5. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Kreker, потому что SQLite, а для него тип не важен. ;)
     
  6. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Ну вот, опять не могу разобраться...
    В [sql]CREATE TABLE albums (id integer primarykey,
    type TEXT,
    artist TEXT,
    ......[/sql]


    [sql]CREATE TABLE types (id integer primarykey,
    type_name TEXT,
    ....[/sql]

    В результате запроса к первой таблице, кроме всех ее полей, нужно найти строку во второй, где id=type

    Делал вот так [sql]SELECT albums.*, types.*
    FROM albums LEFT JOIN types ON (albums.type = types.id )WHERE albums.artist='$artist' ORDER BY data DESC[/sql]
    Но ничего не выходит.
     
  7. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    type в ковычки: `type`