Задать вопрос
Ответы пользователя по тегу MySQL
  • Правильно ли я составил структуру бд по заданию?

    @choupa
    Архитектор (обычный, который строит)
    Я бы рассматривал в качестве основой единицы бронирования не квартиру, а кровати.

    SLOTS — принадлежность кровати квартире
    slot_id | apartment_id | ( price и прочее свойства кровати... )


    RESERVATIONS — резервирование слотов — ссылка на бронирование. В одном бронировании может быть несколько слотов (кроватей), тогда будет несколько строчек на одно бронирование (с одинаковым booking_id)
    slot_id | booking_id

    BOOKINGS — бронирования
    booking_id | user_id | start_date | end_date | ( discount  и прочее, что хотите... )
    Количество гостей хранить избыточно, т.к. число строк в RESERVATIONS с данным booking_id и будет числом гостей.

    Ну и дальше всякое информационное наполнение по пользователям и квартирам:
    USERS
    user_id | name | email | ...
    APARTMENTS
    apartment_id | address | ...
    Общее количество слотов в квартире, опять-таки, хранить не надо, т.к. оно определяется количеством строк в таблице SLOTS для данной apartment_id.

    Чтобы определить количество забронированных слотов на любую дату $checking_date в квартире $apartment_id надо осуществлять довольно сложный запрос:

    SELECT COUNT( slot_id ) FROM SLOTS WHERE
        apartment_id = $apartment_id AND
        slot_id IN ( 
             SELECT slot_id FROM RESERVATIONS WHERE
                 booking_id IN (
                       SELECT booking_id FROM BOOKINGS WHERE
                             start_date <= $checking_date AND end_date > $checking_date
                        )
              )


    Поэтому имеет смысл вычислять и собирать эти данные в отдельную таблицу, где на каждую дату будут храниться данные о забронированных слотах в каждой квартире, которые обновлять при каждом бронировании, его изменении или отмене.

    OCCUPIED
    date | apartment_id | n_occupied | n_available
    Ответ написан
    Комментировать
  • Как выбрать технологию, чтобы клиент был доволен:)?

    @choupa
    Архитектор (обычный, который строит)
    По-моему, всё перечисленное умеет Excel из коробки. Ну разве что можно приправить VBA по вкусу.
    Ответ написан
    2 комментария
  • Какая должна быть структура базы для системы обмена сообщениями?

    @choupa
    Архитектор (обычный, который строит)
    На скорую руку могу такое предложить.

    пользователи:
    user_id | user_name | group_id | password_hash | ...

    папки пользователей:
    folder_id | user_id | folder_name | parent_folder_id | folder_type

    словарь типов папок (стандартные обязательные папки: "Входящие", "Отправленные") :
    folder_type | default_name_ru | default_name_en

    сообщения:
    message_id | from_user_id | title | text | ...

    получатели сообщений (возможна отправка сразу многим, если надо):
    message_id | to_user_id

    содержимое папок:
    message_id | folder_id

    Одно и то же сообщение может присутствовать в самых разных папках, принадлежащих разным пользователям. Соответственно удаление одной записи из последней таблицы никак не влияет на присутствие сообщения в других папках.

    Жирным выделил принципиальные поля, остальное — лирика. Курсивом — ключи.
    Ответ написан
  • Как объединить похожие записи в таблице в одну?

    @choupa
    Архитектор (обычный, который строит)
    1). SELECT * FROM .... WHERE date = '....'

    2). SELECT COUNT( DISTINCT ip) FROM .... WHERE date = '....' AND id_client = ....
    Ответ написан
    1 комментарий
  • Как правильно осуществить выборку из MySQL с помощью checkbox?

    @choupa
    Архитектор (обычный, который строит)
    Мне кажется, вы перемудрили с проектированием БД. Если у вас три фиксированных атрибута у игры, не проще ли их сделать тремя дополнительными колонками в таблице `games`?

    CREATE TABLE IF NOT EXISTS `games` (
     `id` int(255) NOT NULL,
     `game_name` varchar(50) NOT NULL,
     `release` int(4) NOT NULL,
     `developer` varchar(50) NOT NULL,
     `country` varchar(50) NOT NULL,
      KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `games` (`id`, `game_name`, `release`, `developer`, `country`) VALUES
    (1, 'Grand Theft Auto Vice City' , '2002', 'Rockstar', 'USA'),
    (2, 'Counter Strike 1.6', '2000', 'Valve', 'USA'),
    (3, 'Fallout 2', '1998', 'Black Isle Studios', 'USA'),
    (4, 'Minecraft', '2011', 'Mojang', 'Sweden');
    Ответ написан
    Комментировать
  • Почему mysql выдает такую ошибку?

    @choupa
    Архитектор (обычный, который строит)
    Я конечно php-самоучка одиночка в личных целях, не знаю, как делают профессионалы. В таких ситуациях я для отладки в явном виде вывожу сформированную строку запроса на экран, копи-пастом отправляю её в phpmyadmin, и смотрю, что получится. Обычно после этого всё становится ясно.
    Ответ написан
  • Как ускорить UPDATE MySQL?

    @choupa
    Архитектор (обычный, который строит)
    Я вообще не спец, но если сделать таблицу в виде "стека" с автоинкрементом или даже без него

    INSERT INTO stack VALUES ('article_id');

    А потом считать число строк по каждой новости и периодически таблицу очищать.
    Ответ написан
    Комментировать