За последние 24 часа нас посетили 16642 программиста и 1681 робот. Сейчас ищут 835 программистов ...

Проблема с ошибкой 1054 в запросе mysql

Тема в разделе "PHP и базы данных", создана пользователем Иззет, 15 окт 2015.

  1. Иззет

    Иззет Новичок

    С нами с:
    29 сен 2015
    Сообщения:
    25
    Симпатии:
    0
    Здравствуйте, возникает ошибка при запросе к БД, а именно при задании сортировки.
    Unknown column 'add_date' in 'order clause'
    Странно, что ошибка выходит, учитывая то, что данное поле в таблице БД существует, да и сортировка по другим полям тоже проходит нормально.

    С чем это может быть связано?
    Заранее всем спасибо за помощь.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    структуру таблицы и пример запроса
     
  3. Иззет

    Иззет Новичок

    С нами с:
    29 сен 2015
    Сообщения:
    25
    Симпатии:
    0
    Код (Text):
    1.  
    2. -- Table structure for table `goods`
    3.  
    4. CREATE TABLE IF NOT EXISTS `goods` (
    5.   `goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    6.   `name` varchar(255) NOT NULL,
    7.   `keywords` varchar(255) NOT NULL,
    8.   `description` varchar(255) NOT NULL,
    9.   `img` varchar(255) NOT NULL DEFAULT 'no_image.jpg',
    10.   `goods_brandid` tinyint(3) unsigned NOT NULL,
    11.   `anons` text NOT NULL,
    12.   `content` text NOT NULL,
    13.   `visible` enum('0','1') NOT NULL DEFAULT '1',
    14.   `hits` enum('0','1') NOT NULL DEFAULT '0',
    15.   `new` enum('0','1') NOT NULL DEFAULT '0',
    16.   `sale` enum('0','1') NOT NULL DEFAULT '0',
    17.   `price` float NOT NULL DEFAULT '0',
    18.   `add_date` date NOT NULL,
    19.   `img_slide` varchar(255) NOT NULL,
    20.   PRIMARY KEY (`goods_id`),
    21.   FULLTEXT KEY `name` (`name`)
    22. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=36 ;
    Запрос грубо вырежу из кода, думаю должно быть понятно:
    Код (Text):
    1.  
    2. $query = "(SELECT `goods_id`, `name`, `img`, `anons`, `hits`, `new`, `sale`, `price` FROM `goods`
    3.               WHERE `goods_brandid` = '$category' AND `visible` = '1')
    4.               UNION
    5.               (SELECT `goods_id`, `name`, `img`, `anons`, `hits`, `new`, `sale`, `price` FROM `goods`
    6.               WHERE `goods_brandid` IN ( SELECT `brand_id` FROM `brands` WHERE `parent_id` = $category ) AND `visible` = '1')";
    7.     $query .= " ORDER BY `$order`";
    8.     if($up) $query .= " DESC";
    9.     $query .= " LIMIT ".limit($page, display_num());
    Добавлено спустя 12 минут 11 секунд:
    Спасибо, нашёл причину ошибки. Вся загвоздка в операторе ORDER BY - сортирует полученные результаты по выбранному полю (т.е. сортирует данные по полученному из БД полю).
    В моём случае add_date в выборке не участвует, в данной ситуации приемлем оператор GROUP BY.