Как я могу найти базу данных и вернуть весь массив за один раз? - PullRequest
0 голосов
/ 09 февраля 2019

Итак, у меня есть состояние выбора SELECT * FROM Users WHERE age = 21 LIMIT 10 в моем php-скрипте.Прямо сейчас я должен пройтись по строкам, чтобы получать новые строки данных.Как я могу это сделать, чтобы он превратил мне все данные в O(1) сложность времени?Прямо сейчас у меня есть цикл while, который делает его O(n).

function search($stmt, $age) {
    $sql = "SELECT * FROM Users
            WHERE age = ?
            LIMIT 10";
    if(!mysqli_stmt_prepare($stmt, $sql)) {
        return false;
    } else {
        mysqli_stmt_bind_param($stmt, "i", $age);
        mysqli_stmt_execute($stmt);
        $result = mysqli_stmt_get_result($stmt);
        $outfitArray = [];
        while($row = mysqli_fetch_assoc($result)) {
          $searchResults[] = $row;
        }

        return $searchResults;
    }
}
$conn = mysqli_connect($servername, $dBUsername, $dbPassword, $dbName);
if($conn != false) $stmt = mysqli_stmt_init($conn);

print_r(search($stmt, 21));

Мой второй вопрос: какой оператор select я использую, чтобы увидеть смещение.Так что, если я получу 50 результатов, как я могу получить результаты, которые являются 40-м - 50-м?


Мой третий вопрос: как я могу получить количество результатов в поиске без поместить все результаты в массив или использовать цикл?Затем используйте что-то вроде count(), чтобы увидеть, сколько предметов есть.

1 Ответ

0 голосов
/ 09 февраля 2019

Чтобы получить все данные за один проход, вы можете использовать mysqli_fetch_all() например,

$searchResults = mysqli_fetch_all($result, MYSQLI_ASSOC);

Обратите внимание, вам нужно указать MYSQLI_ASSOC, поскольку по умолчанию для этой функции задано MYSQLI_NUM.

Чтобы получить строки, например, от 41-50, вы должны использовать смещение с вашим предельным предложением :

LIMIT 40, 10

Обратите внимание, что при использовании LIMIT безORDER BY не имеет смысла, так как нет гарантии упорядочения строк, и вы можете получать разные результаты при каждом выполнении запроса.Вы можете заказать по id, или по имени пользователя, или по аналогии.

Чтобы получить число результатов поиска, измените запрос на использование COUNT:

$sql = "SELECT COUNT(*) AS num_results FROM Users WHERE age = ?";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...