идея форматирования строки запроса

#php #mysql #cakephp-1.3

#php #mysql — сервер #cakephp-1.3 #mysql

Вопрос:

Я пытаюсь создать строку запроса

 $sql = 'select * from table where '. $option1. $option2 etc
  

как бы я это сделал на твоем месте? каждый запрос будет иметь разное количество опций. выше указано 2, но их может быть целых 10

Спасибо

Ответ №1:

Вы могли бы хранить их, например, в массиве. Что-то вроде:

 $options = array('option1', 'option2', 'etc');
$sql = 'SELECT * FROM table WHERE ' . implode(' AND ', $options);
  

Вы могли бы даже составить весь запрос с помощью массива, в зависимости от того, что вам нужно изменить (я имею в виду, настраивайте только то, что вам нужно изменить). Например:

 $query = array(
    'select' => 'SELECT *',
    'from' => 'FROM table',
    'where' => 'WHERE',
    'conditions' => array('a = 2', '(b = 3) OR (c = 4)'));

/* ... */

if ($something_happens_that_needs_to_change_the_table) {
    $query['from'] = 'FROM another_table';
}

/* ... other things that need to change the query somehow ... */

$query['conditions'] = implode(' AND ', $query['conditions']);

$query_to_count = $query;
$query_to_count['select'] = 'SELECT COUNT(*) AS total';
$query_to_count = implode(' ', $query_to_count);

$query = implode(' ', $query);
  

Комментарии:

1. Или можно использовать гораздо более чистый метод, как описывает @Radu 🙂

Ответ №2:

Если вы используете Cake, создайте массив условий и передайте его в paginate

 $conditions['Model.field1'] = somevalue;
$conditions['Model.field2 LIKE'] = '%what_ever%';
...... etc
$conditions['Model.field3'] = 36;


$search_result = $this->paginate('Model', $conditions);