Вместо использования специальной функции сравнения вы также можете создать тип объекта с помощью специального метода toString()
(который вызывается функцией сравнения по умолчанию):
function Person(firstName, lastName) {
this.firtName = firstName;
this.lastName = lastName;
}
Person.prototype.toString = function() {
return this.lastName + ', ' + this.firstName;
}
var persons = [ new Person('Lazslo', 'Jamf'), ...]
persons.sort();
Вы можете просто повторить результат и посчитать их. Вы не говорите, какой язык или клиентскую библиотеку вы используете, но API предоставляет функцию mysql_num_rows , которая может сообщить вам количество строк в результате.
Это представлено в PHP, например, как функция mysqli_num_rows . Когда вы отредактировали вопрос, упомянув, что используете PHP, вот простой пример использования функций mysqli:
$link = mysqli_connect("localhost", "user", "password", "database");
$result = mysqli_query($link, "SELECT * FROM table1");
$num_rows = mysqli_num_rows($result);
echo "$num_rows Rows\n";
Просто используйте COUNT (*) - см. Подсчет строк в руководстве по MySQL. Например:
SELECT COUNT(*) FROM foo WHERE bar= 'value';
Если вы использовали предложение LIMIT, но хотите знать, сколько строк вы получите без него, используйте SQL_CALC_FOUND_ROWS в своем запросе, а затем SELECT FOUND_ROWS ();
SELECT SQL_CALC_FOUND_ROWS * FROM foo
WHERE bar="value"
LIMIT 10;
SELECT FOUND_ROWS();
Для очень больших таблиц это не будет особенно эффективно, и вам лучше выполнить более простой запрос, чтобы получить счетчик и кэшировать его, прежде чем выполнять запросы для получения страниц данных. .
Если вам нужно решить проблему с простым SQL, вы можете использовать подзапрос.
select count(*) from (select * from foo) as x;
Если вы хотите получить результат плюс количество возвращаемых строк, сделайте что-то вроде этого. Использование PHP.
$query = "SELECT * FROM Employee";
$result = mysql_query($query);
echo "There are ".mysql_num_rows($result)." Employee(s).";
Если в вашем SQL-запросе есть предложение LIMIT
, и вы хотите знать, сколько всего результатов в этом наборе данных, вы можете использовать SQL_CALC_FOUND_ROWS
, а затем SELECT FOUND_ROWS();
. Это возвращает число строк на много больше, чем при использовании COUNT(*)
Пример (прямо из документов MySQL):
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
SELECT SQL_CALC_FOUND_ROWS *
FROM table1
WHERE ...;
SELECT FOUND_ROWS();
FOUND_ROWS()
должен быть вызван сразу после запроса.
Предполагая, что вы используете функции mysql_ или mysqli_, на ваш вопрос уже должны были ответить другие.
Однако, если вы используете PDO, не существует простой функции, которая возвращает количество строк, извлеченных оператором select, к сожалению. Вы должны использовать count () для набора результатов (обычно после присвоения его локальной переменной).
Или, если вас интересует только число, а не данные, PDOStatement :: fetchColumn () в вашем SELECT COUNT (1) ... result.
Так как это 2015, и устарела функциональность mysql_*
, это только PDO
визуализация.
<?php
// Begin Vault (this is in a vault, not actually hard-coded)
$host="hostname";
$username="GuySmiley";
$password="thePassword";
$dbname="dbname";
// End Vault
$b='</br>';
try {
$theCategory="fruit"; // value from user, hard-coded here to get one in
$dbh = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// prepared statement with named placeholders
$stmt = $dbh->prepare("select id,foodName from foods where category=:theCat and perishable=1");
$stmt->bindParam(':theCat', $theCategory, PDO::PARAM_STR,20);
$stmt->execute();
echo "rowCount() returns: ".$stmt->rowCount().$b; // See comments below from the Manual, varies from driver to driver
$stmt = $dbh->prepare("select count(*) as theCount from foods where category=:theCat and perishable=1");
$stmt->bindParam(':theCat', $theCategory, PDO::PARAM_STR,20);
$stmt->execute();
$row=$stmt->fetch(); // fetches just one row, which is all we expect
echo "count(*) returns: ".$row['theCount'].$b;
$stmt = null;
// PDO closes connection at end of script
} catch (PDOException $e) {
echo 'PDO Exception: ' . $e->getMessage();
exit();
}
?>
create table foods
( id int auto_increment primary key,
foodName varchar(100) not null,
category varchar(20) not null,
perishable int not null
);
insert foods (foodName,category,perishable) values
('kiwi','fruit',1),('ground hamburger','meat',1),
('canned pears','fruit',0),('concord grapes','fruit',1);
Для моей реализации я получаю вывод 2
для обоих echos
выше. Цель вышеупомянутых 2 стратегий состоит в том, чтобы определить, использует ли реализация вашего драйвера rowCount, и если нет, искать запасную стратегию.
Из руководства по PDOStatement :: rowCount :
PDOStatement :: rowCount () возвращает количество строк, затронутых оператором DELETE, INSERT или UPDATE.
For most databases
, PDOStatement :: rowCount () не возвращает количество строк, затронутых оператором SELECT. Вместо этого используйте PDO :: query (), чтобы выдать инструкцию SELECT COUNT (*) с теми же предикатами, что и предполагаемый оператор SELECT, а затем используйте PDOStatement :: fetchColumn (), чтобы получить количество строк, которые будут возвращены. Ваше приложение может затем выполнить правильное действие.
Если вы выбираете данные с помощью Wordpress, вы можете получить доступ к количеству строк, возвращенных с помощью $ wpdb-> num_rows:
$wpdb->get_results( $wpdb->prepare('select * from mytable where foo = %s', $searchstring));
echo $wpdb->num_rows;
Если вы хотите конкретный подсчет на основе запроса подсчета mysql, то вы делаете это:
$numrows = $wpdb->get_var($wpdb->prepare('SELECT COUNT(*) FROM mytable where foo = %s', $searchstring );
echo $numrows;
Если вы запускаете обновления или удаляете, то количество затронутых строк возвращается непосредственно из вызова функции:
$numrowsaffected = $wpdb->query($wpdb->prepare(
'update mytable set val=%s where myid = %d', $valuetoupdate, $myid));
Это также относится к $ wpdb -> обновить и $ wpdb-> удалить.