MongoDB сортировка (получить записи с существующим полем в начале списка) [дублировать]

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

Вы определяете строку, используя одинарные кавычки, и PHP не анализирует строки с разделителями одиночной кавычки. Чтобы получить переменную интерполяцию, вам нужно использовать двойные кавычки или конкатенацию строк (или их комбинацию). См. http://php.net/manual/en/language.types.string.php для получения дополнительной информации.

Также вы должны проверить, что mysql_query вернул действительный ресурс результата, иначе fetch_ *, num_rows и т. д. не будут работать с результатом, поскольку это не результат! IE:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

http://us.php.net/manual/en/function.mysql-query.php для получения дополнительной информации.

2
задан Blakes Seven 22 October 2015 в 08:08
поделиться

1 ответ

Поскольку вы указываете поле, которое не существует во всех документах вашего .sort(), тогда там, где оно отсутствует, значение считается null, что, конечно, имеет более низкий порядок и, следовательно, более высокий приоритет в отсортированном чем любое другое значение.

Единственный способ изменить этот ответ состоит в том, чтобы по существу «спроектировать» более высокое значение, из которого можно сортировать, чем другой ожидаемый диапазон значений, чтобы эти результаты упали до конца другие результаты. Такие «взвешенные» запросы с прогнозируемым значением требуют метода .aggregate() :

db.collection.aggregate([
    { "$project": {
        "name": 1,
        "bids": 1,
        "sortfield": { "$ifNull": [ "$bids", 999999 ] }
    }},
    { "$sort": { "sortfield": 1 } }
])

Используется $project и $sort , чтобы получить результат в желаемом порядке. Сначала выполните операцию $ifNull , чтобы решить, что разместить в свойстве «sortfield» проецируемого документа в зависимости от того, какие данные имеются, а затем использовать это значение в рамках этапа конвейерной сборки $sort.

Вы можете также интегрировать обычные операции запроса с конвейером $match в начале конвейера, что было бы рекомендовано сократить документы, необходимые для обработки в $project.

Если документы, не содержащие требуемого поля, значение «sortfield» будет тогда выше ожидаемых значений, и эти документы будут отображаться в конце, а не в начале.

4
ответ дан Blakes Seven 3 September 2018 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: