Ответы пользователя по тегу MySQL
  • Хранение и вывод городов из БД Mysql методом closure table?

    Maksclub
    @Maksclub
    maksfedorov.ru
    делайте как вам в прошлом вопросе посоветовали

    сделайте таблицы:
    • s_regions
    • s_regions_path

    s_regions
    +-----------------------------+
    |  id   |         name        |  
    +-----------------------------+
    |   1   |         Россия      |
    +-----------------------------+
    |   2   |  Московская область |
    +-----------------------------+
    |   3   |        Москва       |
    +-----------------------------+


    Я мог немного напутать с полем level, так как только вчера сам узнал о таком алгоритме и не реализовываал его еще
    s_regions_path
    +-----------------------------------+
    | region_id |  path_id  |   level   |
    +-----------------------------------+
    |      2      |      1    |    1    |   <-- Тут мы храним связь Мособласти, указываем связь с Россией
    +-----------------------------------+
    |      3      |      2    |    1    |   <-- Тут мы храним связь  Москвы указывая на Мособласть
    +-----------------------------------+
    |      3      |      1    |    2    |   <-- Тут мы храним связь Москвы с Россией
    +-----------------------------------+


    Достать всех детей России (id=1):
    SELECT r.id, r.name
    FROM s_regions r
    LEFT JOIN s_regions_path l ON l.region_id=r.id
    WHERE l.path_id=1


    Достать только города Мособласти (id=2), то есть только следующий уровень (не уходя глубже):
    SELECT r.id, r.name
    FROM s_regions r
    LEFT JOIN s_regions_path l ON l.region_id=r.id
    WHERE l.path_id=2
    AND l.level=1


    Получить все зависимости для Москвы (id=3) и отсортировать по возрастанию уровня:
    SELECT r.id, r.name
    FROM s_regions r
    LEFT JOIN s_regions_path l ON l.region_id=r.id
    WHERE l.region_id =3
    ORDER BY l.level DESC
    Ответ написан
  • Как вывести все записи по parent_id MYSQL?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Если вам в программе нужна иерархия, то нужно рекурсией выводить...
    Но знайте — в 2018 году это не есть гуд, только если у вас немного категорий, если много и вы только-только проектируете БД, то сделайте через Nested Sets (изучать придется дольше, но работоспособность дикая)

    По вопросу:
    Если рекурсией — это делается на бекенде (например в PHP) написать функцию, которая вызывает саму себя и в каждой итерации будет к каждой категории записывать детей...

    Запрос будет тогда максимально простым:
    SELECT t.id, t.name
    FROM test t
    WHERE t.parent_id=2
    ORDER BY t.parent_id


    Забавно
    Вчера помогал человечку на форуме Simpla CMS наоборот уйти от рекурсии, тк там 50 тысяч категорий и как раз проблема вылезла с рекурсией... почитайте о проблеме:
    forum.simplacms.ru/topic/13311-%D0%BE%D0%B3%D1%80%...
    При таких объемах данных — проблемы полезут сразу и на стороне запросов и на стороне бекенда
    Ответ написан
    Комментировать
  • Вывод времени на php + mysql в формате "d.m.Y"?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    $idate= $item['idate'];
    $newDate= gmdate("d.m.Y", $idate);
    echo $newDate;
    Ответ написан
    Комментировать
  • Как джоинить в Yii2?

    Maksclub
    @Maksclub
    maksfedorov.ru
    работайте с более низкой абстракцией (DAO)
    https://github.com/yiisoft/yii2/blob/master/docs/g...

    Пример:
    $articles = Yii::$app->db->createCommand('SELECT article.id, article.image, article.title, article.date, user.f_name, user.l_name, category.name
    FROM article 
    LEFT JOIN category ON article.category_id = category.id 
    LEFT JOIN user ON article.user_id = user.id')
     ->queryAll();


    Только запросы не делайте в контроллерах :)
    Ответ написан
    5 комментариев
  • Как сделать поиск по множеству параметров?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Построить БД по 3 нормальной форме, у вас в упрощенном виде получится:

    Таблица products с полями:
    id, name, title, description,...

    Таблица атрибутов features:
    id, name, position, in_filter

    Таблица product_features по EAV (Entity Attribute Value/Сущность-Атрибут-Значение)
    с полями:
    product_id, features_id, value

    Тут будут привязки к продукту, характеристике и значению
    Например для товара с id=1 (Грузовик) с характеристикой c id=1 (Тип кузова) и если у него 2 значений, то табличка примерно так будет выглядеть:
    +------------------------------------------------------------+
    |    product_id   |    feature_id     |         value        |
    +------------------------------------------------------------+
    |        1        |         1         |     Рефрижератор     |
    +------------------------------------------------------------+
    |        1        |         1         | Рефрижератор+изотерм |
    +------------------------------------------------------------+


    Тогда, чтобы в картчоке товара вывести все значение, нужно будет просто выбрать все характеристики по полю product_id

    Для фильтра тоже самое, только вы отбирать уже будете product_id по полю features_id, и по полученному списку айдишников выводить уже данные из таблицы продуктов products
    Ответ написан
    2 комментария
  • Откуда надо запускать консоль mysql?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Запустить консоль можно через проводник windows, найдя в папке с MySQL утилиту mysql.exe. Обычно она находится по адресу: [путь до папки]\mysql\bin\mysql.exe.


    Загуглил — на Винде не работал никогда с MySQL :)
    Ответ написан
    Комментировать
  • Какие таблицы БД должны быть в таком онлайн справочнике(ссылка внутри)?

    Maksclub
    @Maksclub
    maksfedorov.ru
    таблица аптек
    pharmacies
    id, name, adress**, district, metro, city, work_start*, work_end*


    таблица лекарст
    medicines
    id, name,  vendor (или vendor_id***), sku (и/или какой др нормативный артикул


    и связующая таблица
    medicines_pharmacies
    medicines_id, pharmacies_id, price, updated_at, count


    * Для аптек я указал время начала работы и время конца, но в принципе можно сделать просто поле all_day с булевым значением (1 или 0) для указания крулгосуточно или нет

    ** Может понадобиться разбивка адреса на детальные составляющие или просто хранить КЛАДР какой-нибудь... тут по-разному можно сделать

    ***Если в системе нужен отдельный производитель(например для поиска по производителю), то у лекарств будет не vendor, а vendor_id и будет отдельная таблица vendors с полями id, name, adsress....

    ====

    Это минимальные поля для поиска, в действительности у аптек есть всякие сайты, описания, они могут быть входить в состав аптечной сети и т.д... регистрационные номера например могут быть... также и у лекарств (состав, для чего, категория и прочее)

    По поводу того, где собирать данные — нужно подключать аптеки и просить у них выгрузки в каком-то формате... в xml из 1С скорее всего или может там есть какой-то унифицированный формат... также есть уже такие сервисы в Москве, может они АПИ предоставляют... по поводу лекарств — есть открытые данные, поищите тут data.gov.ru/taxonomy/term/15/datasets
    Ответ написан
    1 комментарий
  • Как построить html дерево из MySQL запроса?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    1. Рекурсивный метод, как у вас... Его легко строить, но на чтении замороченный, при выборе родителей или наоборот детей, постоянно рекурсией отбирать придется...

    2. Nested sets... через индексы, очень удобен на чтении, но заморочен для записи... для большого числа категорий все же рекомендовал бы его, так как запись в интернет-магазине реже, чем чтение
    Посмотрите у Максим Тимофеев, там он хорошо этот алгоритм объясняет:
    https://www.youtube.com/watch?v=VmdYUPdwy-o
    единственное видео, которое я у него смотрел :)

    Там хоть и на фреймворке сделано (что и вам советую), но принцип можно взять на вооружение и без фрейма
    Ответ написан
    Комментировать
  • Как делают деплои базы данных? Именно базы данных, а не миграций?

    Maksclub
    @Maksclub Куратор тега Веб-разработка
    maksfedorov.ru
    Это автоматизируется миграциями как раз -- то есть изменение БД вы отдаете все тому же контролю версий ГИТ.

    При деплое можно сделать так, что подтянется ветка (вместе с параметрами для БД!) и применятся миграции... А иначе откуда любой утилите деплоя узнать, что править в БД?! Вот вы в файле мигарции и пишите что именно поменять...

    Если вам не нравится синтаксис описания, то почти везде в миграции как правило можно описывать голые SQL... главное -- записать изменение БД в файл, чтобы было что разворачивать
    Ответ написан
  • Как перенести товары в другой интернет магазин?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Вариант 1:
    1. Скачать программку ContentDownloader, у них есть бесплатный вариант... есть платный (пригодится для последующих работ и отбивается за вечер)
    нужно вечерок посидеть, посмотреть уроки или доку и настроить под нужный сайт
    2. Залить полученный csv в свой магазин
    UPD: Программка под виндой работает только вроде, под Wine не пробовал

    Вариант 2:
    1. Самому запилить парсер на php, может у них есть например фид для Яндекса или что-то еще... бывают удачи
    2. Залить полученный csv/xml в свой магазин
    Ответ написан
    Комментировать
  • Можно ли использовать такую структуру таблиц?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Шо то ху**я, шо это ху**я!

    Пост же ИЗ соцсети? Значит у поста есть только 1 соцсеть и только 1 пост?
    то есть связь 1 к 1

    1. Сделайте обычный `posts` с полями message, image, url и т.д...
    и сдеалйте в этой же таблице `posts` поле network

    2. Создайте табличку `networks`
    В ней храните name, slug (fb, inst, ok ....)
    Ответ написан
    Комментировать
  • Как правильно установить CMS на базу с существующими записями?

    Maksclub
    @Maksclub
    maksfedorov.ru
    нет доступа к phpMyAdmin

    Можно залить на сайт файл adminer.php и используя логин, имя пользователя и пароль работать как в Phpmyadmin, часто так и работаю...

    ссылка:
    https://github.com/vrana/adminer
    Ответ написан
    2 комментария
  • Схема и структура базы данных товаров?

    Maksclub
    @Maksclub
    maksfedorov.ru
    UPD: Что-то я упустил, пошел думать...

    3 нормальная форма, классика жанра
    И сделать денормализацию

    products [id, name, ....]
    variants [id, product_id, type, require, price (?)]
    
    product_characteristics [id, name,sort,...]
    product_values [product_characteristics_id, product_id, value]
    
    variant_characteristics[id, name, sort,...]
    variant_values [variant_characteristics_id, variant_id, value]


    Описание:
    Есть товар, у него есть варианты в таблице variants
    Так как у вариантов не известно сколько будет полей (а скорее всего очень много), то выносим эти поля в таблицу variant_characteristics с связующей таблцей variant_values , то есть это связь многие ко многим.

    Например: есть варианты с выбором размера и длины, то в таблице variant_characteristics заводим эти значения, а в таблице variant_values указываем id этих значений, id варианта и само значение

    * Важно:
    если на цену не влияют характеристики, то цену прямо варианту задаем в variants, если влияют (например XL стоит дороже XS), то писать ее в variant_values

    Это называется EAV https://en.wikipedia.org/wiki/Entity%E2%80%93attri...
    Характеристики товара тоже будут также сделаны, но там будет уже не вариант товара, а сам товар.
    Картинки также делаются.
    Ответ написан
  • Как написать запрос на получение N самых населенных городов?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Просто по аналогии + добавьте сортировку и лимит:
    www.sql.ru/forum/749635/podskazhite-s-count-v-svya...

    А вообще изучите возможности Гугла -- помогает,
    пока вы веб-программист -- это означает, что есть поисковики-гиганты и есть интернет

    UPD: и да, такие вопросы лучше не делать под "ищу работу"
    Ответ написан
    Комментировать
  • Как перенести БД на другой сайт, написанный на yii2?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Ну если будете делать БД по классической 3 нормальной форме, то перенесете даже на ЦМС некоторые :)
    Это не должно быть проблемой при переносе...
    Ответ написан
    Комментировать
  • Знаки "???" вместо кириллицы. Как исправить кодировку?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    точно БД в кодировке utf8?
    Ответ написан
    Комментировать
  • Как решить ошибку при установке mysql?

    Maksclub
    @Maksclub
    maksfedorov.ru
    без сисадмина не решить легко, были теже проблемы, поставил 5.6 а потом захотел 5.7 и началось....

    Варианты (которых сам придерживаюсь):
    • если локально делаешь, то не делай в будущем -- разворачивай Вагрант и там фигачь все это дело (у меня прямо сейчас локально мускул поломан :) работаю через Вагрант и не парюсь)
    • если на VPS сервере -- снеси все (если речь про установку мускула идет, могу предположить -- только распаковался) и делай все нормально сразу... по идее тут Докером это добро ставить
    Ответ написан