Как достать по одной записи каждой категории? - MySQL
Формулировка задачи:
"SELECT `datePublication`,`plaсeParsing` FROM `parse` WHERE `plaсeParsing` in($queriPlaceParsing) Order BY `datePublication` Desc GROUP BY `plaсeParsing` "
Решение задачи: «Как достать по одной записи каждой категории?»
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-инъекций.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д