Ответы пользователя по тегу MySQL
  • При sql запросе писать с кавычками или без?

    @galaxy
    1) Как безопаснее и правильней писать имя таблицы и базы с кавычками или без кавычек . Если с кавычками то с двойными или одинарными.

    Это не кавычки, а обратные апострофы (backticks).
    Правильнее - в апострофах. Без них нельзя использовать многие зарезервированные слова в именах таблиц/колонок/пр., а также ограничен набор символов. С апострофоми можно делать так:
    SELECT * FROM `select` WHERE `select`.id > 100;
    SELECT * FROM `a b`;
    CREATE TABLE `a``b` (`c"d` INT);
    select * from tablename group by `group`;
    Ответ написан
    3 комментария
  • Как получить определённый элемент из бд(через foreach)?

    @galaxy
    Вы несколько раз определяете фукнцию selected() внутри foreach, вот последняя и срабатывает.
    Пишите свой url в value у option, функцию selected() вытащите за пределы foreach:
    <select size="4" id="series_list" name="selection" onchange="selected(this)" disabled>

    var videoPlayer = document.getElementById('video-player');
                
                function selected(sel){
                    videoPlayer.src = sel.options[sel.selectedIndex].value;
                    videoPlayer.play();
                }
    Ответ написан
    1 комментарий
  • Как вывести значениЕ которое больше всего повторяется?

    @galaxy
    Ну например:
    select i from t group by i order by count(*) desc limit 1;


    sqlfiddle.com/#!17/d1148/1
    Ответ написан
    Комментировать
  • Для чего WITH CONSISTENT SNAPSHOT?

    @galaxy
    Я бы не назвал себя специалистом в mysql, но вот что можно увидеть из документации, как минимум:
    The WITH CONSISTENT SNAPSHOT modifier starts a consistent read for storage engines that are capable of it. This applies only to InnoDB. The effect is the same as issuing a START TRANSACTION followed by a SELECT from any InnoDB table. See Section 15.7.2.3, “Consistent Nonlocking Reads”. The WITH CONSISTENT SNAPSHOT modifier does not change the current transaction isolation level, so it provides a consistent snapshot only if the current isolation level is one that permits a consistent read. The only isolation level that permits a consistent read is REPEATABLE READ. For all other isolation levels, the WITH CONSISTENT SNAPSHOT clause is ignored. A warning is generated when the WITH CONSISTENT SNAPSHOT clause is ignored.


    То бишь:
    1. Все это касается только InnoDB
    2. START TRANSACTION WITH CONSISTENT SNAPSHOT не отличается от START TRANSACTION + SELECT (точнее, как я понял, тот самый консистентный снепшот фиксируется в первом случае в момент START TRANSACTION, а во втором - в момент SELECT).
    3. Суть одна и та же - транзакция видит данные на момент фиксации снепшота, независимо от того, что там делают параллельные транзакции (+ она, конечно, видит свои собственные изменения)
    4. WITH CONSISTENT SNAPSHOT не меняет уровень изоляции
    5. WITH CONSISTENT SNAPSHOT работает только с REPEATABLE READ и игнорируется для любых других уровней с выдачей предупреждения (блин, не имею возможности проверить: что, даже для SEIRALIZABLE?)

    Короче, вывод: ставите REPEATABLE READ (он, впрочем, стоит по умолчанию) и нафиг не сдался этот WITH CONSISTENT SNAPSHOT.

    я могу вообще не делать полную блокировку таблиц, чтобы не потерять незавершенные транзакции. Я правильно понимаю смысл использования?

    Смысл: вы получаете снимок состояния БД на момент фиксации снепшота. Обычно, это то, что нужно для бекапа
    Ответ написан
    1 комментарий
  • Как вытянуть данные с ячейки mysql {title}?

    @galaxy
    Там же JSON
    echo json_decode($settings)->title;
    Ответ написан
    Комментировать
  • Как найти максимальные значения из сумм в MySQL?

    @galaxy
    С mysql 8:
    SELECT user_id, price FROM (
    	SELECT t.*, rank() over (order by price desc) as r FROM (
    		SELECT user_id, SUM(price) price FROM `order` GROUP BY user_id
    	) t
    ) t2
     WHERE r = 1
    Ответ написан
  • Как изменить свойства колонки, не удаляя текущие значения?

    @galaxy
    Сделать еще одну колонку, скопировать данные, колонки переименовать?
    Ответ написан
    2 комментария
  • Сколько времени должен занимать такой запрос MySQL?

    @galaxy
    А почему, собственно, он должен быстро выполняться?
    Запрос вынужден прочитать все 12+ млн строк, сргуппировать и просуммировать значения. Думаете тут какой-то волшебный индекс спасет?

    Делайте materialized view (точнее, эмулируйте их через триггеры)
    Ответ написан
  • Как организовать таблицу достижений на сайте?

    @galaxy
    Несмотря на то, что вы несколько таблиц нарисовали, из того, что вы пишете, понятно, что все эти таблицы - суть одна (связь один-к-одному), т.е. налицо отсутствие нормализации.
    Достижений у юзера может быть много, разного типа, так что тут должна быть связть один-ко-многим, что-то типа:
    +-----------------+----------+----------------+-----------------+
    | achievements_id | users_fk |      type      |      date       |
    +-----------------+----------+----------------+-----------------+
    |               1 |        1 |              1 |      2021-10-01 |
    |               2 |        2 |              1 |      2021-10-04 |
    |               3 |        1 |              2 |      2021-10-08 |
    |               4 |        1 |              4 |      2021-10-15 |
    +-----------------+----------+----------------+-----------------+


    Если у самих ачивок в зависимости от типа будут разные свойства, можно еще один уровень связи один-ко-многим сделать:
    +-----------------+-----------+----------------+-----------------+
    | achieve_prop_id | acieve_fk |      type      |      value      |
    +-----------------+-----------+----------------+-----------------+
    |               1 |         1 |              1 |           'abc' |
    |               2 |         2 |              1 |           '145' |
    +-----------------+-----------+-----------------+----------------+
    Ответ написан
  • Как исправить SQL скрипт?

    @galaxy
    Есть мысль, что кавычки мешают. Засчет вот этого gener=connection.escape(gener) вы получаете в запросе LIKE "%'blabla'%".

    connection.escape вообще к использованию не рекомедуется:
    def escape(self, obj, mapping=None):
            """Escape whatever value is passed.
            Non-standard, for internal use; do not use this in your applications.
            """


    Формируйте строку в питоне. Только если вы не хотите, чтобы пользователи могли использовать специ-символы LIKE в строке поиска, их нужно заэскейпить:
    cursor.execute(script.format(year_from=args.year_from,
                 year_to=args.year_to,
                 name="%{}%".format( (args.regexp.translate(str.maketrans({'%': '\%', '_': '\_'})),) ),
                 gener="%{}%".format( (gener.translate(str.maketrans({'%': '\%', '_': '\_'})),) ),
                 rating=1,
                 N=args.N))


    SELECT m.title, year, avg(r.rating)
    FROM movies AS m
    JOIN rating AS r
    ON m.movie_id = r.movie_id
    WHERE m.year BETWEEN {year_from} and {year_to} AND m.title LIKE {name} AND m.genres LIKE {gener}
    GROUP BY  r.movie_id, m.title, m.year
    HAVING avg(r.rating) > {rating}
    ORDER BY avg(r.rating) DESC, m.year DESC, m.title asc
    LIMIT {N};


    как-то так
    Ответ написан
    Комментировать
  • Как объединить два SQL запроса в один?

    @galaxy
    По-моему, в PHP правильнее будет объединить: таблица стран, очевидно, небольшая, ее можно выгрузить и закешировать в виде массива ID => NAME. Потом просто в PHP подставлять вместо ID названия.

    На sql сделать можно, конечно, но будет уродливо и не особо производительно.
    Ответ написан
  • Почему программа ругается на создание внешнего ключа?

    @galaxy
    Определения других таблиц покажите.
    А так причин несколько может быть:
    • родительских таблиц/колонок не существует
    • типы колонок в дочерней/родительской отличаются
    • родительская колонка не имеет ограничения уникальности (KEY/UNIQUE)
    • движок MyISAM (хе-хе)
    Ответ написан
    Комментировать
  • Почему не выводится последний элемент из бд mysql?

    @galaxy
    'text' => 'Текст секретного сообщения: ' . $messages,

    И что такое $messages? Кто ему присвоил значение?

    message_get() каким образом, по-вашему, вообще возвращает текст сообщения или хоть что-нибудь?

    Last but not the least: сделал mysqli_query(... "SELECT ..."), сделай уж потом и fetch*
    Ответ написан
    Комментировать
  • Как сделать INSERT данных в таблицу с автоинкрементом?

    @galaxy
    Либо опустить колонку option_id, либо вместо значения использовать DEFAULT:
    INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES
    ( '__plugins_cache_244', 'test1', 'no')
    ...
    
    INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
    (DEFAULT,  '__plugins_cache_244', 'test1', 'no')
    ...
    Ответ написан
    Комментировать
  • Нужно ли использовать связи между таблицами mySQL?

    @galaxy
    Вроде всё ок. Но недавно узнал что есть тип связей многие ко многим. Где в самой бд эту связь нужно создавать. Возникает вопрос, зачем в бд указывать эти связи, если и без них этот join норм работает?

    Звучит, как будто subscribers - и есть связь многие-ко-многим (между сущностями users и groups).

    Недавно узнал, что когда делаешь селект к бд, например WHERE id=20, то БД не ищет эту запись перебором начиная с id=1, а обращается к id=20 сразу. Это для меня был шок. Как оно находит запись сразу?

    Оно и не находит сразу. Если нет индекса, то будет полный перебор (только не начиная с id=1, id=2, а скорее id=4324, id=88, id=281... - в том порядке, как они валяются в таблице).
    Это можно сравнить с библиотекой: если книги свалены в кучу, библиотекарь будет вынужден перебирать их по одной, пока не найдет нужную, допустим, "Войну и мир". А если у него есть каталог, он быстро найдет ящик с буквой "В", в нем отсек "ВЛ-ВР", в нем карточку "Войны и мира" и в ней уже стойку, полку и ряд, где искать книгу.
    Ответ написан
    5 комментариев
  • Почему не могу удалить родительскую таблицу MYSQL?

    @galaxy
    Какой смысл тогда в ON DELETE CASCADE?

    В том, что удаляются дочерние (из таблицы citizens) записи при удалении родительской (towns).

    Для удаления таблиц есть DROP TABLE ... CASCADE, но (сюрприз-сюрприз) в mysql он не работает.
    Ответ написан
    2 комментария
  • Как сортировать по полю из другой таблицы?

    @galaxy
    SELECT f.*, u.last_visit
      FROM f_list f, users u
     WHERE u.id = f.id_sender AND f.id_receiver = 11
     UNION
    SELECT f.*, u.last_visit
      FROM f_list f, users u
     WHERE u.id = f.id_receiver AND f.id_sender = 11
     ORDER BY last_visit desc


    sqlfiddle.com/#!9/cb52eb/2

    Вы пытались смешать в одну кучу sender/receiver, а это два джойна, вообще говоря. Т.к. интересут текущий user, проще делать один джойн + объединение.
    Ответ написан
    1 комментарий
  • Не импортируется таблица через командную строку на сервере?

    @galaxy
    В вас дело.
    mysql -v запустило клиент mysql, и вы вытаетесь импортировать из командной строки mysql.
    Ответ написан
    Комментировать
  • Никак не работает RedBeanPHP?

    @galaxy
    if(isset($data["send__button"])) {
    И откуда, спрашивается, в $_POST возьмется send__button? С чего вы решили, что данные отправляются исходя из класса?
    <button class="send__button" type="submit">Send</button>
    Ответ написан
    1 комментарий