У меня возникли проблемы с использованием GROUP BY
, ORDER BY
, LIMIT
, в общем, мои запросы отлично работают, но когда я пытаюсь получить более конкретную информацию, я продолжаю сталкиваться с проблемами. Я пытаюсь сломать его и идти шаг за шагом, но я не могу понять проблему.Конструкция запросов PDO с GROUP BY, ORDER BY
Из моего пользователя класса Я называю DB, как это:
$this->_db->get('listings', array('userid', '=', $this->data()->id, ' AND ',
'email', ' = ', $this->data()->email, ' GROUP BY reference ORDER BY row ASC'));
Мой DB Класс настроен так:
public function get($table, $where){return $this->action('SELECT * ', $table, $where);}
private function action($action, $table, $where = array()){
$operators = array('=', '>', '<', '>=', '<=' , 'AND' ,'OR', 'LIKE', 'GROUP BY','ORDER BY', 'ASC', 'DESC');
if(!empty($where)){
$sql = "{$action} FROM {$table} WHERE ";
if(count($where) > 3){
$sql .= "(";
$isOp = FALSE;
foreach ($where as $key => $value) {
if($isOp){
if(in_array($value, $operators)){
$sql .= " {$value} ";
$isOp = FALSE;
}else{return FALSE;}
}else{
$sql .= " {$value} ";
$isOp = TRUE;
}
}
$sql .= ")";
if(!$this->query($sql, array($value))->error()){return $this;}
}else if(count($where) === 3){
$field = $where[0];
$operator = $where[1];
$value = $where[2];
if(in_array($operator, $operators)){
$sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?"; // NO $value ?
if(!$this->query($sql, array($value))->error()){return $this;}
}
}
}else{
// If array is empty
$sql = "{$action} FROM {$table}";
if(!$this->query($sql)->error()){return $this;}
}
return FALSE;
}
public function query($sql, $params = array()){
$this->_error = FALSE;
if($this->_query = $this->_pdo->prepare($sql)){
$x = 1;
if(count($params)){
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}// End IF count
if($this->_query->execute()){
$this->_lastID = $this->_pdo->lastInsertId();
try{
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
}catch(Exception $e){
// Catch Error
}
$this->_count = $this->_query->rowCount();
}else{$this->_error = TRUE;}
}
return $this;
}
В общем я строю все с нуля чтение учебников и последующие инструкции из книг.
Снова у меня возникают проблемы со следующей группой «По порядку, как, лимит». Я, вероятно, не привязываю ее правильно, но у меня недостаточно знаний, чтобы найти мою ошибку.
Заранее спасибо.
ОШИБКА ПОЛУЧИТЬ
SELECT * FROM предложений WHERE (идентификатор пользователя = 4 GROUP BY ссылки) за исключением 'PDOException' с сообщением «SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «GROUP BY ссылки)» в строке 1
https://dev.mysql.com/doc/refman/5.0/en/select.html – Uueerdo
@Uueerdo, это не моя проблема, у меня проблема с привязкой значений правильно. Я считаю, что моя проблема лежит внутри функции query() – theStudent
Указанная вами ошибка указывает иначе: 'GROUP BY' не является допустимым условием для WHERE. – Uueerdo