Ответы пользователя по тегу MySQL
  • Не могу вывести данные из mysql через объекты?

    flapflapjack
    @flapflapjack
    на треть я прав
    Сергей
    спасибо, а возможно вы сможете подсказать тоже самое но уже в ООП?


    class DB {
    private $host;
    private $user;
    private $pass;
    private $db;
    private $connection;
    public function __construct($host,$user,$pass,$db)
    {
    $this->host=$host;
    $this->user=$user;
    $this->pass=$pass;
    $this->db=$db;
    }
    
    public function connect()
    {
    $this->connection = @new mysqli($this->host,$this->user,$this->pass,$this->db);
    $this->connection->set_charset('utf8');
    return $this->connection;
    }
    }
    
    
    class News {
    private $connection;
    public function __construct($connection)
    {
    $this->connection=$connection;
    }
    public function get_news()
    {
    $result_set = $this->connection->query('SELECT * FROM news');
    return $result_set->fetch_object();
    }
    }
    
    
    $db=new DB('host', 'un', 'pass', 'db');
    $connection=$db->connect();
    $news=new News($connection);
    
    $news_list=$news->get_news();
    
    
    var_dump($news_list);//операции с объектом, то бишь вывод и т.д. и всякие foreach()


    Изначально может показаться что кода стало больше, но при росте проекта это будет наоборот - короче.

    Вы так же можете использовать и процедурный стиль, но в каждую функцию придется передавать $connection, в ООП же - только классу.

    Кроме того в процедурном стиле у вас будет куча таких функций:
    get_news();
    get_user_id();
    get_id_by_email();
    get_user_id_by_news_id(); и т.д.

    При ООП же всё структурируется согласно классам,

    $news->get_user();
    $user->get_news();

    и т.д.
    Это не тема для тостера, это надо читать хотя бы про MVC
    Ответ написан
    3 комментария
  • Оптимизация запроса MySQL - не работает без (*)?

    flapflapjack
    @flapflapjack
    на треть я прав
    Да это бред полный, либо вы косячите в запросе, а нам какие-то огрызки кода показали, где ошибки нет. Полный запрос давайте. Не верю.

    Тем более вы на хостинге в PHPmyAdmin можете выполнить любой запрос, выборку и посмотреть какой запрос выполнился и как же это он отработал без вашего этого (*), а с конкретными полями.

    5c8f7e72b9adc194122267.png5c8f7e7f52e6a586954675.png
    Ответ написан
  • Новости с категориями, нужна вторая нормальная форма SQL?

    flapflapjack
    @flapflapjack
    на треть я прав
    Есть новости. У новостей есть категории.


    Просто создайте столбец category_id в таблице с новостями и всё. Зачем еще одна таблица?

    P.S.

    Третья таблица имеет смысл, только если одной новости может быть назначено сразу несколько категорий, по аналогии с тегами на тостере.
    Ответ написан
    1 комментарий
  • Запись в MYSQL при посещении страницы?

    flapflapjack
    @flapflapjack
    на треть я прав
    Ставьте при посещении человеку куку. При повторном посещении проверяете - если кука есть, пересылаете его куда надо.

    Запись в бд ведете по той же логике.
    Ответ написан
    Комментировать
  • Как реализовать постраничную навигацию с LEFT JOIN?

    flapflapjack
    @flapflapjack
    на треть я прав
    $page=is_numeric($_GET['page']) ? $_GET['page'] : 1;
    
    $onpage=30;
    $result=mysqli_query("
    SELECT users.*,adresses*2
    FROM users AS t1
    LEFT JOIN addresses AS t2 ON t2.user_id = t1.id LIMIT ".($page-1)*$onpage.",".$onpage
    );
    if(mysqli_num_rows($result)>$onpage)
    {
    while ($row = mysqli_fetch_array($query)){
    print $row['имя_поля']."<br>";//здесь выводите что вам надо
    }
    echo "Можно отрисовать ссылку на <a href=\"?page=".$page+1."\">следующую</a> страницу";
    }
    Ответ написан
  • Как сохранить/передать индексы таблиц?

    flapflapjack
    @flapflapjack
    на треть я прав
    Попробуйте не просто удалять все строки перед вставкой новых значений, а делать именно TRUNCATE TABLE - эта команда обнуляет ключи AUTO_INCREMENT
    Ответ написан
    Комментировать
  • Как в live режиме отслеживать изменение в бд?

    flapflapjack
    @flapflapjack
    на треть я прав
    Как мне кажется - вы не в том направлении мыслите.

    А при чем тут вообще БД? Вы каким скриптом запись статьи обрабатываете - в том же месте и шлите уведомления в удобном вам виде. База данных тут вообще не при чем. Максимум, как в данной задаче должна участвовать БД - это сообщить методу рассылки пушей - смогла новость записаться или не смогла. (Если новость не записалась, то и пуши кидать не нужно, ведь статья еще не существует)
    Ответ написан
    Комментировать
  • Как задать правильный запрос к БД?

    flapflapjack
    @flapflapjack
    на треть я прав
    В таких случаях всё очень просто - сделайте дамп SQL запроса, и посмотрите, что происходит.

    Напишите после вашего кода сразу -
    die($sql);

    и вы увидите в чём ошибка.
    Да и мы бы не отказались посмотреть на дамп.
    Ответ написан
    Комментировать
  • Для чего нужен составной ключ в mysql?

    flapflapjack
    @flapflapjack
    на треть я прав
    У меня например есть таблица "права доступа".

    access (id,user_id,access_mode)
    У одного пользователя не может быть два раза одно и тоже значение access_mode ( зачем допускать пользователя 2 раза к одному и тому же разделу сайта?)

    Потому я использую двойной ключ (user_id,access_mode)
    Ответ написан
    9 комментариев
  • Как построить грамотно связь в бд?

    flapflapjack
    @flapflapjack
    на треть я прав
    3 таблицы:
    1) курсы (поля: id, название)
    2) части курсов (поля: id, id_курса, название)
    3) уроки (поля: id, id_части_курса, тип урока)
    Ответ написан
  • Как данные брать из таблицы в БД для таблицы?

    flapflapjack
    @flapflapjack
    на треть я прав
    echo '<td>'.$result['name'].'</td>';

    1) У вас в таблице нет ни одного столбца по имени name, он и не должен ничего выводить.
    2) Почему вы выводите в цикле столбцы, когда fetch_array извлекает СТРОКУ?

    Нужно так:

    $sql = mysqli_query($db, "SELECT * FROM test_table2 ORDER BY id DESC");
    while ($result = mysqli_fetch_array($sql))
    {
    echo "<tr><td>".$result['id']."</td><td>".$result['Numeric']."</td><td>".$result['Date']."</td><td>".$result['Unsortable']."</td></tr>";
    }


    И старайтесь не использовать fetch_array, используйте fetch_assoc. Fetch_array возвращает большущий массив с числовыми им именными индексами, а assoc только с именными. Я не представляю себе ситуацию, когда может пригодиться fetch_array, если только вы не делаете что-то типа phpmyadmin, который подразумевает работу с заведомо неизвестными таблицами и именами столбцов. У вас столбцы - известны.
    Ответ написан
  • Как найти запись в базе данных по трем критериям?

    flapflapjack
    @flapflapjack
    на треть я прав
    Я так понимаю, судя по вопросу вы даже не представляете как работает MySQL?

    Делайте так:

    в PHPMyAdmin есть кнопка "поиск" - тыкайте её, вводите параметры поиска, жмите "найти" и phpmyadmin вам выдаст результат, и покажет каким запросом он его нашёл. Так вы сможете изучить на начальном уровне, как происходит обращение к таблице
    Ответ написан