За последние 24 часа нас посетили 18254 программиста и 1597 роботов. Сейчас ищут 910 программистов ...

Запрос к двум таблицам

Тема в разделе "MySQL", создана пользователем Nikolai_, 1 сен 2010.

  1. Nikolai_

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

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Помогите, пожалуйста, составить запрос сразу к двум таблицам, чтобы потом полученные строки можно было вывести, сортируя по времени.

    Названия таблиц и полей такие:

    toponyms
    region
    name
    text
    datetime
    id_toponym

    kommentaries
    id_toponyms
    text
    datetime
    id_kommentary
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    join или union в зависимости от того как надо объединить.
     
  3. Nikolai_

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

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Помогите, пожалуйста, составить запрос к БД на удаление данных из двух таблиц с одним id.

    Есть 2 таблицы: articles и comments, связанные одним id. Но в таблице comment не всегда есть соответствующие таблице articles записи. (Иными словами у некоторых статей нет комментов).

    Не могу найти нигде внятного объяснения решения этой задачи. Нашел один вроде анплогичный пример, но он почему-то не пашет. Подскажите, что может не так.


    [sql] mysql_query("DELETE FROM articles, comments
    USING articles
    LEFT JOIN comments
    ON articles.id = comments.id
    WHERE articles.id = $id;");[/sql]
     
  4. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    ))) не знал что до такого можно додуматься)
    Двумя отдельными запросами удаляете и будет вам счастье. Если строки с ид не будет он ничего не удалит
     
  5. Nikolai_

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

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Два запроса - это, конечно, выход. Прочитал, что лучше все же делать в одном запросе. Дескать, чем больше запросов, тем больше нагрузка на базу.
     
  6. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    ну да, на пару часов медленнее. Особенное если учесть что дико интенсивно приходится напрямую удалять записи из таблиц
    а вообще http://www.phpclub.ru/mysql/doc/delete.html заинтересовало. Даже не думал что можно сразу из нескольких таблиц бахать
     
  7. lexa

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

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

    Надо исходит из случаев. Каждый случай - свой подход.

    Например. Удаление. добавление, редактирование. Это относительно select'а редкие действия. Количество таких запросов не играет значительной роли.

    Другой пример - выборка (select). Это самый частый запрос. И надо подходить подумав и потестировав количество запросов и их качество. Где-то лучше объединить запросы в обид. А где-то разбить один запрос на несколько мелких.

    То есть никогда нельзя быть уверенным, что Правило одного Запроса всегда лучше. Как и в обратном - в Правиле Кучки Запросов. :)

    В твоём случае, кстати, лучше пользоваться мелкими запросами в силу слабых знаний мускула. Пусть их будет много, это почти никак не скажется.
     
  8. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    foreign key ... on delete cascade уже не модно? =))
     
  9. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Volt(220)
    там еще и типтаблиц должен быть определенным
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    ShamahN
    Я знаю.
    Как то раз насоздавал внешних ключей, а потом удивлялся, хрен ли они не работают. Мануал мне объяснил.
     
  11. Nikolai_

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

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Прочитал, что есть такая команда OPTIMIZE TABLE. Скажите, желательно ли ее применять после удаления каждой записи или это не обязательно?

    lexa, спасибо за доходчивое разъяснение.
     
  12. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    если места на серве не хватает (опять же, все зависит от организации проекта) и можно бахнуть пару миллиардов записей и если тип таблиц MyISAM, то уменьшения объема ты дождешься только после OPTIMIZE TABLE. Вроде все доходчиво написано
     
  13. Nikolai_

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

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Ясно. Места на сервере хватает, но все же вставлю ее - думаю, хуже не будет.
     
  14. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Вот это точно думаю не к чему. Вот просто как собаке пятая нога. Если период изменения (добавления/удаления) записей достаточно невелик - тупо лишний запрос, т.к.