Как достать по одной записи каждой категории? - MySQL

Узнай цену своей работы

Формулировка задачи:

Есть бд в ней поле plaсeParsing это категория. есть другое поле datePublication это дата так вот мне нужно достать по последней дате, каждой категории я хотел сделать так но получил ошибку
"SELECT `datePublication`,`plaсeParsing` FROM `parse` WHERE `plaсeParsing` in($queriPlaceParsing)  Order BY `datePublication` Desc  GROUP BY `plaсeParsing` "

Решение задачи: «Как достать по одной записи каждой категории?»

textual
Листинг программы
 class sql{
        private static $instance;
        private $db;
 
        public static function app() {
            if (self::$instance == null) {
                self::$instance = new self();
            }
 
            return self::$instance;
        }
 
        private function __construct() {
            setlocale(LC_ALL, 'ru_RU.UTF8');
            $this->db = new \PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' . MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD);
            $this->db->exec('SET NAMES UTF8');
            $this->db->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
        }
 
        public function select($query, $params = array()) {
            echo $query."<br>";
          $q = $this->db->prepare($query);
            $q->execute($params);
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            return $q->fetchAll();
        }
        
        public function getByHash($table, $hash_key, $hash_value, $real_key, $real_value){
            $q = $this->db->prepare("SELECT * FROM $table WHERE $hash_key=:$hash_key");
            $q->execute(array($hash_key => $hash_value));
        
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            while($row = $q->fetch()){
                if($row[$real_key] == $real_value)
                    return $row;
            }
            
            return null;
        }
 
        public function insert($table, $object, $last=null) {
            $columns = array();
 
            foreach ($object as $key => $value) {
 
                $columns[] = $key;
                $masks[] = $value;
 
                if ($value === null) {
                    $object[$key] = 'NULL';
                }
            }
 
            $columns_s = implode(',', $columns);
            $masks_s = "'".implode('\',\'', $masks)."'";
 
            $query = "INSERT INTO $table ($columns_s) VALUES ($masks_s)";
 
 
 
            $q = $this->db->prepare($query);
            $q->execute($object);
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            if($last == true ) {
                return $this->lastInsertId();
            }
            else{
                return null ;
            }
        }
        public function lastInsertId(){
            $resalt = $this->select("SELECT LAST_INSERT_ID()");
 
            if(isset($resalt[0]['LAST_INSERT_ID()'])){
                $resalt = $resalt[0]['LAST_INSERT_ID()'];
            }
            return $resalt;
        }
        public function insertMany($table, $object,$last = null,$count=null) {
            $columns = array();
            $i=1;
            foreach ($object as $value) {
                foreach ($value as $key=>$val) {
                    $masks[] = $val;
                    if($i==1) {
                        $columns[] = $key;
                    }
 
                    if ($value === null) {
                        $object[$key] = 'NULL';
                    }
                }
                $masks = implode("','", $masks);
                $masks2[]= "('".$masks."')";
                unset($masks);
                $i++;
            }
 
            $columns_s = implode('`,`', $columns);
 
            $masks_s = implode(',', $masks2);
            //echo $masks_s;
 
            $query = "INSERT INTO `$table` (`$columns_s`) VALUES $masks_s";
 
            $this->select($query);
            //$q = $this->db->prepare($query);
            //$q->execute($object);
 
            //if ($q->errorCode() != \PDO::ERR_NONE) {
             //   $info = $q->errorInfo();
            //    die($info[2]);
           // }
 
            return $this->lastOrCount($last,$count,$i-1);
 
        }
        public function lastOrCount ($last=null,$count=null,$i=null){
 
            if ($count == true and $last == true ){
 
                return $array = array($this->lastInsertId(),$i);
 
            } else if($last == true){
 
                return $this->lastInsertId();
            }
            if($count == true ) {
 
                return $i;
            }
            else{
                return null ;
            }
        }
        
        public function update($table, $object, $where, $params = array()) {
            $sets = array();
 
            foreach ($object as $key => $value) {
 
                $sets[] = "$key=:$key";
 
                if ($value === NULL) {
                    $object[$key] = 'NULL';
                }
            }
 
            $sets_s = implode(',', $sets);
            $query = "UPDATE $table SET $sets_s WHERE $where";
            ///echo $query;exit();
            $q = $this->db->prepare($query);
            $q->execute(array_merge($object, $params));
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            return $q->rowCount();
        }
 
        public function delete($table, $where, $params = array()) {
            $query = "DELETE FROM $table WHERE $where";
            $q = $this->db->prepare($query);
            $q->execute($params);
 
            if ($q->errorCode() != \PDO::ERR_NONE) {
                $info = $q->errorInfo();
                die($info[2]);
            }
 
            return $q->rowCount();
        }
 
 
    }

Объяснение кода листинга программы

Этот код, как предполагается, написан на языке PHP и использует PDO для работы с базой данных MySQL. Он содержит класс SQL, который предоставляет методы для работы с базой данных, включая методы select, getByHash, insert, lastInsertId, insertMany, lastOrCount, update и delete. Метод select используется для выполнения SQL-запроса SELECT. Метод getByHash используется для выполнения запроса SELECT с использованием хеш-таблицы. Метод insert используется для выполнения запроса INSERT. Метод lastInsertId используется для получения последнего вставленного идентификатора. Метод insertMany используется для выполнения массового запроса INSERT. Метод lastOrCount используется для получения последнего вставленного идентификатора или количества вставленных записей при массовом вводе. Метод update используется для выполнения запроса UPDATE. Метод delete используется для выполнения запроса DELETE. Методы этого класса используют подготовленные выражения для предотвращения SQL-инъекций.

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы