Мне было интересно, как обработать запрос MySQL в PHP как объект? - PullRequest
1 голос
/ 01 сентября 2011

Мне было интересно, как я могу обработать запрос mysql в php точно как объект.

Ex:

//supposing...
$beginning=$_GET['start'];//value equal to 3
$ending=$_GET['end'];//value equal to 17
$conn=new mysqli("localhost","user","password","databasename");
$query=$conn->query("select name, favoriteFood, weight, from tablename");

1- Предположим, что имя таблицы содержит 23 строки, как печатать только 14 строк, начиная, например, с 3-й строки и заканчивая 17-й строкой, как показано ниже?

Ex:

//supposing... It, I guess, should result in error but is a sketch of my ideia    
for($i=$beginning,$colsCol=$query->fetch_array(MYSQLI_ASSOC); $i<$ending; $i++)
printf("%s %s %s<\br>",$colsCol['name'][$i],$colsCol['favoriteFood'][$i],$colsCol['weight'][$i]);

2 - А позже, как упорядочить полученные строки с переменной $ query?

P.S .: Я знаю, что для упорядочения результатов я мог бы упорядочить пользователя по столбцу, но в этом случае я хотел бы упорядочить результирующие строки после выполнения запроса.

Ответы [ 3 ]

1 голос
/ 01 сентября 2011

для 2D-массива вы можете использовать его.


function asort2d($records, $field, $reverse=false) {
// Sort an array of arrays with text keys, like a 2d array from a table query:
  $hash = array();
  foreach($records as $key => $record) {
    $hash[$record[$field].$key] = $record;
  }
  ($reverse)? krsort($hash) : ksort($hash);
  $records = array();
  foreach($hash as $record) {
    $records []= $record;
  }
  return $records;
} // end function asort2d

1 голос
/ 01 сентября 2011

Использовать SQL для SQL-задач:

"как печатать только 14 строк, начиная, например, с 3-й строки и заканчивая 17-й строкой"

$stmt = $database->prepare('SELECT `name`, `favoriteFood`, `weight` FROM `tablename` LIMIT :from, :count');
$stmt->bindValue(':from', (int)$_GET['start'] - 1);
$stmt->bindValue(':count', (int)$_GET['end'] - (int)$_GET['start']);
1 голос
/ 01 сентября 2011

Если вы хотите выполнить сортировку позже, после выполнения запроса, вам нужно будет сохранить результаты в структуре данных PHP и выполнить там сортировку.Или повторите запрос с новыми параметрами сортировки.

Что касается извлечения только определенных строк, было бы гораздо эффективнее получить только те строки, которые вы хотите.В противном случае (для больших наборов результатов) вы заставляете много данных извлекаться с диска, пересылаться по проводам и т. Д. Только для того, чтобы их выбрасывали.Скорее расточительно.

Однако, если вы настаиваете на том, чтобы действовать таким образом:

$row = 0; $data = array();

while($row = $query->fetch_array(MYSQLI_ASSOC)) {
   $row++;
   if (($row < 3) || ($row > 17)) {
      continue;
   }
   $data[] = $row;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...