Ответы пользователя по тегу MySQL
  • Как поступают, когда в таблицу большого старого работающего проекта надо добавить столбец?

    @sAndreas
    Юзер
    Существующий код подвязан на количество столбцов.

    во первых потихоньку переписать код, который ссылается на номер столбца на код который будет ссылаться на название столбца. Но это можно сделать и потом.
    во вторых проверить все ТУПЫЕ запросы типа
    select * from table1
    union
    select * from table2
    и переписать их в вид
    select id, name... from table1
    union
    select id, name... from table2
    и только потом добавлять столбец, он должен добавиться последним(если через консоль писать alter table, через графический редактор может столбец влезать и не последним). Лучше конечно заранее подготовиться, сделать копию таблицы, выбрать время в которое никто не работает с этой таблицей, менять и самому тестить(например в 11 вечера). А также заранее предупредить всех пользователей(если это внутренний проект и вообще пользователей можно предупредить), чтобы они в случае чего сразу писали. Правда они могут оборзеть и писать что у них чайник в коридоре стал долго воду кипятить и скорее всего это всё из-за вашего "чего то там новенького", но зато если реально из-за вас что нибудь "упадёт", то хотя бы вы сразу это исправите и меньше шансов что получите пилюлю.
    Ответ написан
    Комментировать
  • Как найти два элемента с максимальным количеством общих связей?

    @sAndreas
    Юзер
    Если я правильно понял весь прикол в
    максимальное кол-во общих студентов
    то:
    select ts1.teacher_id,ts2.teacher_id, count(ts1.student_id) as cnt
    from teacher_student ts1
    left join teacher_student ts2
    on ts1.teacher_id<>ts2.teacher_id and ts1.student_id=ts2.student_id
    group by ts1.teacher_id,ts2.teacher_id
    order by cnt
    limit 2
    Ответ написан
    Комментировать
  • Удалять ли данные из бд?

    @sAndreas
    Юзер
    Моя позиция, которая меня не раз выручала - если позволяют размеры - то лучше хранить всё. Я даже делал в отдельную таблицу запись кто удалил данные(потому что обычно автоматом пишется user_id того кто изменил данные, а если удалил - то и записи не оставалось кто именно удалил). Пару раз ставил на место особо хитро*опых, которые думали что если данные удалить, то потом никто и не узнает кто послал на удаление.
    Ответ написан
    Комментировать
  • Можно ли уместить сложную логику в один запрос БД?

    @sAndreas
    Юзер
    Многое зависит от того как выставлены индексы и как напишете запрос. Если строк в таблицах много, если правильно выстроены индексы, и важна скорость выполнения, и не нужна наглядность самого кода(я так и не понял - сам запрос тоже в образовательных целях или только результат работы программы), то лучше писать в один запрос, естественно придётся его "полировать"(или переделывать запрос смотря на результат или смотреть "план запроса"). А если там строк немного и потом кто то будет смотреть/править Ваш код - то лучше писать небольшие запросы с комментариями.
    Ответ написан
    Комментировать
  • Как сделать выборку из базы MySql по условию - только если все записи имеют такое значение?

    @sAndreas
    Юзер
    SELECT user_id FROM table
    GROUP BY user_id
    HAVING SUM (ABS(status_id)) -COUNT(status_id)=0
    or
    HAVING SUM (ABS(status_id)) = COUNT(status_id)
    Выведет 2,3,4
    Ответ написан
    Комментировать