Мне нужно вытащить все записи в моей базе данных, которые относятся к определенному user_id, заказывать их к моменту их ввода в базу данных (это время php unix time ()), а затем группировать их по фамилии, чтобы они сидели с записи одной и той же фамилии.
Это запрос до сих пор. Хотя это дает мне только определенное количество записей.
$sql = "SELECT * FROM people WHERE user_token='$user_token' ORDER BY time GROUP BY surname";
Каков правильный способ использования ORDER и GROUP для того, чтобы получить все результаты, сгруппированные по фамилии, но заказанные к моменту их ввода? Благодарю.
Предложение ORDER BY
должно быть последним, но вам нужно указать поля для агрегирования.
Такие как:
SELECT surname, count(*) FROM people WHERE user_token='$user_token' GROUP BY surname ORDER BY surname
У вас есть ошибка в синтаксисе SQL, синтаксисе SQL-инъекций и, возможно, вы используете устаревшее расширение базы данных. Итак, вот что должно выглядеть на самом деле:
$dsn = "mysql:dbname=$db_name;host=$db_host"; try{ $pdo = new PDO($dsn, $username, $password); } catch(PDOException $e){ die($e->getMessage()); } $sql = "SELECT surname, count(id) FROM people WHERE user_token=:usr_token ORDER BY time GROUP BY surname"; $stmt = $pdo->prepare($sql); if ($stmt->execute(array(':usr_token'=>$user_token))){ $result = $stmt->fetchAll(); } else{ print_r($stmt->errorInfo()); die("Error executing query"); }
Подробнее см. В руководстве PDO