Вы можете просто повторить результат и посчитать их. Вы не говорите, какой язык или клиентскую библиотеку вы используете, но 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();
Для очень больших таблиц это не будет особенно эффективно, и вам лучше выполнить более простой запрос, чтобы получить счетчик и кэшировать его, прежде чем выполнять запросы для получения страниц данных. .
Рассмотрим очень простую схему, основанную на сети Фейстеля, для перестановки, скажем, идентификационного номера билета. Это сообщение (которое, оказывается, есть в списках PostgreSQL, но на самом деле не имеет ничего общего с PostgreSQL) описывает простую сеть Фейстеля . На каждом билете вы можете напечатать идентификационный номер билета (выбирается последовательно), а затем «секретный код билета», который является результатом передачи идентификационного номера через сеть Фейстеля. Возможные варианты включают добавление контрольной цифры к секретному коду и основание ввода в сеть Фейстеля не только на последовательно сгенерированном числе (число + 10 000 * номер идентификатора события и т. Д.).
Вы можете вычислить CRC.
По сути, просто начните добавлять каждый символ в строку и ограничьте длину длинным целым числом.
Вы можете начать с известного случайного числа и сохранить его в первых 4 байтах, а последние четыре будут вычислением, как я описал ранее.
Это будет два целых числа или восемь байтов.
Why reinvent the wheel? Just do something like this (Python Code, ask me if you need clarification):
import hashlib
secretpassword = "blah"
def createticket(eventnum, ticketnum):
m = hashlib.md5() # or any crypto hash you like
m.update("%s%s%s" % (eventnum, ticketnum, secretpassword))
return m.hexdigest()[:10]
Example:
Event Number 1
Ticket Number 123
createticket(1,123)
# output: 2d7f242597
Mr ticketman comes around with his verifier and enters in the event/ticket number and the hash:
def verifier(eventnum, ticketnum, hash):
return hash == createticket(eventnum, ticketnum)
verifier(1,123, "2d7f242597")
# ouput: True
Для проверки в автономном режиме я вижу только одно простое решение ..
Добавьте к идентификатору билета хэш идентификатора билета и соль для каждого события. Вы можете усечь любой криптографический хэш до желаемого размера. Я не могу придумать особой причины использовать что-либо, кроме случайного числа для самого идентификатора базового билета.
Это позволяет вам ограничить размер идентификатора билета и иметь явно пропорциональную безопасность по отношению к размеру самого билета. идентификатор билета.
Я вижу два способа:
Here's a scheme that has the advantage of letting you calculate the next ticket hash from the previous (so you can verify whether one is missing), but doesn't let outsiders calculate the next one:
Ticket.0 = substring(HASH(SALT + IV ), 0, LENGTH)
Ticket.i = substring(HASH(SALT + Ticket.i-1), 0, LENGTH)
where
HASH
is any hashing function that distributes its entropy relatively evenly across the output stringSALT
is a constant you keep secret; it's a good idea to use a different one for each eventIV
is another constant you keep secret