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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    вводим страну(в базе есть англия, германия, франция, испания, италия) и результатом будут города, всё это дело работает через ajax
    ниче не ясно, дохрена кода, нихрена не понятно. Возвращаете вы что? Список городов принадлежащих стране? Листаете постранично как? Через линки или тоже аяксом?
    Ответ написан
  • Как реализовать добавление клиента при добавлении задания?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Если же данные клиента не полные, то данные сохранять только в заданиях (таблице 2).
    Почему? Чем обусловлена такая хитропопая логика? Вам от клиента по сути нужен уникальный номер, дальше привязывать к нему какие-то данные или нет вообще вопрос вторичный. Данные во вторй таблице(`customer_name`, `customer_phone`, `customer_email`) вообще не нужны, это нарушает 3 нормальную форму.
    Ответ написан
    7 комментариев
  • Как получить товар с несколькими картинками?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Мой вам совет - не гонитесь за крутизной а ля "я выбрал все одним запросом", в данном случае это не лучшее решение, как ни странно. Я не знаю как у вас организованна работа с коллекциями объектов, в моем случае любой объект наследуемый от базового(итем, брэнд, пост, юзер...) имеет поле $haveImages, и при формировании коллекции объект коллекции получает все id выборки в отдельный массив, а массив выбранных и инициализированных данными объектов имеет индексы равные id объекта. После чего проверяется, если у объекта $haveImages = true; вызывается метод appendImages(), который уже делает выборку по картинкам где objectid in( ... ) и по результатам раскидывает их в объект $images(это коллекция картинок) каждому объекту из коллекции итемов (или юзеров или чего другого). В итоге каждый объект имеет в составе коллекцию изображений.
    Ответ написан
    2 комментария
  • Как записать ID пользователя из $_SESSION в таблицу БД?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых похожий вопрос вы уже задавали и вам на него ответили,
    во вторых перестаньте говнокодить и разберитесь уже один раз со структурами базы данных, типами данных и модификаторами.
    Кроме того, как вам уже писали - используйте встроенные механизмы бобов, а не городите хрень в стиле 90х годов.

    Проверьте типы данных которые у вас в полях и которые у вас в переменных.

    Все еще не понимаю нахуа вам разделять дату и время.

    UPD: если уж пользуетесь кривым подходом - то хоть с умом, проверьте что вы там выполняете...
    $sql = "INSERT INTO tasks (`task`, `date`, `time`, `users_id`) VALUES ('$task', '$date', '$time', $users_id)";
    var_dump($sql);
    R::exec($sql);


    PS: strip_tags нифига не защищает от скуэль инжекций, которые у вас там можно в полный рост...
    Ответ написан
    Комментировать
  • Как создать пагинатор?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    есть две таблицы "countrys"
    в смысле countries? И это, запятые экономить не надо, навряд ли у вас 2 таблицы countries.

    и вторая таблица "citys"
    в смысле cities?

    и countri_id, последний это id страны
    в смысле country_id?

    список нужных городов а как теперь сделать не весь список, а скажем только по 5 городов на страницу не понимаю.
    ЗАПЯТЫЕ!!!

    по 5 городов на страницу
    во первых - не вижу ни кода, ни запроса которым вы пытались это сделать.

    Сделал другую ссылку с полным списком городов и в нем постраничный вывод всё норм, а как теперь в него засунуть еще и выбор страны не понимаю
    ну так а какая разница, тот же селект, просто добавляется условие where country_id = и номер страны.
    Ответ написан
  • Какие есть годные практики для работы с большим количеством записей в таблице (1M+)?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Crash,
    У каждой заявки множество специфичных конкретно для нее параметров.
    значит вся "специфика" должна быть вынесена в отдельную таблицу. А херачить на каждый чих колонку - решение такое себе, по многим соображениям.

    1. Индексы, выборочно для полей, по которым чаще всего осуществляется поиск.
    скорее для групп полей, по которым осуществляется поиск, выборка, объединение и сортировка. Кроме того - explain, slow log.

    2. Объединение нескольких колонок в одну, для однотипных данных. Они будут храниться в формате JSON.
    только если по ним не идет поиск, иначе это нифига не оптимизация, а скорее наоборот.

    В остальном мысли о разделении на грячий/холодный стек верные. Можно задуматься еще о переносе части горячих строчек в какой-то мемори сторэйж типа редиса.
    Ответ написан
    Комментировать
  • Как правильно выполнить зарос, начиная с указанного ID элемента?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Какой то непонятный вопрос, точнее странный способ выбирать следующие N постов. Способ сортировки НИКАК не влияет на следующие 10, точнее это не ваша забота. В случае апи я указываю метод сортировки и страницу, так как апи НЕ ЗНАЕТ где и как я остановился, к нему приходит запрос "отдать страницу 4 с сортировкой по рейтингу", что должно вызвать у вас sql
    SELECT * FROM `posts` 
    WHERE 1 
    ORDER BY `rating` DESC 
    LIMIT 40,10

    Все, результат отдать пользователю. Если следующим запросом к апи будет 5 страница с сортировкой по дате - отдаете 5 страницу с сортировкой по дате.

    UPD:
    Все по порядку как положено (AUTO INCREMENT)
    и тут посты с ид 5 и 12 удаляются, и - опа, не по порядку (
    Ответ написан
    7 комментариев
  • Как отправить сообщение на локальный сервер?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Ну, купи "нелокальный сервер" где нибудь у хостера, далее напиши на чем то серверсайд(нода, пых, питон...), создай базу данных(например MySQL), далее на фронтэнд на яваскрипте нужно будет уже клиентскую часть написать... Ну и все в принципе, делов то...
    Ответ написан
  • Не работает скрипт php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Самое логичное предположение:
    В принципе код должен проверять данные из какого-то парсинга(не суть какого), в котором есть свои значения, отвечающие за уникальность товарной единицы(?), например артикул или штрихкод, проверять поле unique_id, в которое оно вносится, и если таковое уже есть делать апдейт. Все бы шло хорошо(ну, в меру, код действительно такой себе), но какой-то вася отвечающий за разработку бд это поле тупо пропустил при создании, а может похерилось при переносе, или из бэкапа не ту версию подняли, короче это текстовое поле ушло в горы.

    Выход - добавьте поле в таблицу сами(только бэкапы сделайте), скорее всего что то типа:
    ALTER TABLE `tablename` ADD `unique_id` VARCHAR(24) NULL , ADD INDEX (`unique_id`);
    Ответ написан
    3 комментария
  • Ошибка с выводом переменной?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) $id = $_GET['edit']; здесь $id в итоге может быть вообще пустой, или с шикарным sql инжектом.
    2)
    $get = mysqli_query($db, "SELECT * FROM users WHERE id = '$id'");
    можно только надеяться что выше есть объявление $db

    3)$str = mysqli_fetch_array($get); неплохо бы проверить что запрос что-то вернул вообще
    4) if(isset($_GET['edit'])) если это условие не выполняется, переменная $str вообще нигде не будет создана.

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Я понимаю что эта переменная видна только в if. Как ее вывести?

    Дело не в том что она "видна" в иф, дело в том что если иф не выполняется, то эта переменная вообще не будет существовать, соответственно вывод ее ниже выдаст варнинг - нет переменной. Вариантов 2:
    1) более правильно все используемые переменные определять перед исполнением скриптов(как советует Михаил Братеньков). Нормальные редакторы(пхпсторм например) такие куски кода определяет сразу.
    2) Более кривое решение - в месте использования переменной для вывода проверять ее существование(более менее правильный вариант), или "засобачить" переменную(<?php echo @$dif; ?> - совсем кривой подход), такой подход оправдан только в ограниченном ряде случаев, например если много переменных могут быть не определены и код нужно рефакторить, но некогда.
    Ответ написан
    2 комментария
  • Как выбрать из mysql последние 25 записей?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    SELECT  * FROM( 
       SELECT  
           message_in_the_chat.write_data write_data,
           users.login,
    ......
    ORDER BY `write_data`  DESC LIMIT 25
    )  sub
    ORDER BY sub.write_data  ASC
    Ответ написан
    2 комментария
  • Как реализовать запрос поиска максимального совпадения?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    В рамках вашей задачи проще сделать что то типа
    $name = 'Иванов Иван Иванович';
    $name  = explode(' ',$name);
    //....
    $sql = "
    select * from `users`
    where `fullname` like 'Иванов %' 
    and like '% Иван %' ";
    Ответ написан
    Комментировать
  • Почему происходит ошибка при миграции базы данных?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Access denied for user 'shop'@'localhost'

    'username' => 'fedorov_shop',

    конфиги? Поиск по строке в проекте?

    ПС: пару месяцев назад что-то подобное проскакивало, вроде разные конфиги для разных окружений где-то подключались.
    Ответ написан
    Комментировать
  • Как сделать ID записи последовательными без пропусков?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Так делать не надо. Если нужно поле которое будет у вас в диапазоне 1-100 - добавьте его отдельно, первичный индексный автоинкрементный ключ не для этого.

    что заставляет перебирать все 1000 записей, а WHERE id > 1000 LIMIT 10, что не заставляет перебирать все 1000 записей
    У вас нет никакого понятия как работают индексы, по этому вы думаете что так будет быстрее. Хотя логика подсказывает что за 20+ лет существования реляционных бд наверняка при необходимости повысить производительность до такой опции бы давно додумались и она была бы распространена, но почему то такого не случилось... Это по тому что достаточно каждый день выпивать по чайной ложке прочитать как работают индексы, и все встанет на свои места.
    Ответ написан
    Комментировать
  • Как переделать авторизацию пользователей?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) нельзя хранить пароли в открытом виде, используйте password_hash()
    2) Для хеширования паролей хорошей практикой считается предварительно "соленые" значения
    3) для проверки используйте password_verify(), алгоритм простой и легко гуглится, например вот здесь есть одна из реализаций
    Ответ написан
  • Как правильно вывести историю диалога двух пользователей?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Как из этой таблицы выбрать историю диалога когда известен id отправителя, например 1

    Историю диалога(одного) можно выбрать имея 2 идентификатора - пользователя_1 и пользователя_2.
    Историю переписок(всех конкретного пользователя) можно получить используя только 1 id - данного пользователя.
    Историю переписок(всех конкретного пользователя, где этот пользователь именно отправитель) можно получить используя только 1 id - данного пользователя.
    Вам что из этого надо?
    Ответ написан
  • Как выполнить LEFT JOIN с условием?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Если бы нужно было определить прочел ли пользователь сообщение, был бы смысл делать выборку именно как у вас, но указав в полях возврата mr.`user_id`, который был бы либо айди, либо нулл. Если же у вас МНОГО людей в чате - тогда правильнее будет сделать так:
    SELECT m.`id`, m.`message`, mr.`message_id` status
    FROM `messages` m
    LEFT JOIN (
          select `message_id` 
          from `messages_read`
          where `user_id` = 111
    ) mr 
    ON mr.`message_id` = m.`id` 
    WHERE m.`chat_id` = 12
    Ответ написан
    Комментировать
  • Как вывести дату из базы данных mysql?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    strtotime()
    date(), в частности параметр "М"
    Ответ написан
    Комментировать
  • MySQL 8.0.16 Некорректное поведение с curdate?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Проблема в том чт инициализация должна быть константой
    ...
    `period` date NOT NULL DEFAULT (CURRENT_DATE),
    ....

    Должно работать
    Ответ написан