Обучение/Помощь новичкам | Выбрать id
Тема закрыта by
SNEG
Закрепленное сообщение:Автор
Если все 100 записей хранятся в базе данных, очевидно что после удаления 20 записей, остальные 80 записей останутся в базе данных. Нет?
________
посл. ред. 07.09.2023 в 14:56; всего 1 раз(а); by SayrusCraft
________
посл. ред. 07.09.2023 в 14:56; всего 1 раз(а); by SayrusCraft
Идентификатор должен быть уникальным, если у вас в базе данных более 1-го идентификатора, то вы плохо продумали логику сайта / приложения.
Теперь разберемся этот кусок кода что предложил ты , выберем всё (пошаримся по всех колонках, учитывая что нам одна нужна это id) в таблице users где совпали хэши и оборвем поиск при первом совпадении
php
$check_hash = $mysqli -> query("SELECT * FROM `users` WHERE `hash` = '".$hash."' LIMIT 1");
if($check_hash -> num_rows)хэш это и есть id
________
посл. ред. 07.09.2023 в 17:03; всего 1 раз(а); by SNEG
num_rows - таки вообще не пользуюсь а тем более в связке с limit 1, это же надо такое изобретать, посчитать количество записей сколько их всего есть и на первом совпадение оборвать
На таблицах мелких не заметно, а при обьемных проблемно, а вообще если у тебя сессия короткая то ты можешь почистить таблицу сессий и тогда шанс повторного хеша будет мелким 👐
Тут он верно сделал, зачем делать full scan таблицы Если цель найти хотя-бы одно совпадение?
На таблицах мелких не заметно, а при обьемных проблемно, а вообще если у тебя сессия короткая то ты можешь почистить таблицу сессий и тогда шанс повторного хеша будет мелким 👐
Пропустим хэш выглядит числом 24 не будем писать на 32 символа
С его слов нужно посчитать select 24 from sessions where id =24 limit 1 ? Колонка primary key дабликата там быть не может цель сгенерировать без ошибок новый
________
посл. ред. 07.09.2023 в 17:09; всего 2 раз(а); by SNEG
Id это и есть $hash
Пропустим хэш выглядит числом 24 не будем писать на 32 символа
С его слов нужно посчитать select 24 from sessions where id =24 limit 1 ? Колонка primary key дабликата там быть не может цель сгенерировать без ошибок новый
Хотя вариант с try catch выглядит привлекательным всеравно))
Так он делает проверку перед insert Т.е. проверяет наличие хеша до инсерта.
Хотя вариант с try catch выглядит привлекательным всеравно))
________
посл. ред. 07.09.2023 в 17:38; всего 2 раз(а); by SNEG
Как раз таки всё хорошо продумываю такой говнокодь избегаю
Теперь разберемся этот кусок кода что предложил ты , выберем всё (пошаримся по всех колонках, учитывая что нам одна нужна это id) в таблице users где совпали хэши и оборвем поиск при первом совпадении
php
$check_hash = $mysqli -> query("SELECT * FROM `users` WHERE `hash` = '".$hash."' LIMIT 1");
if($check_hash -> num_rows)хэш это и есть id
Я привёл вам пример поиска хэша в базе данных, а не пытался написать код за вас.
При поиске нужна только одна колонка (id)? Нет проблем, после SELECT вместо * укажите только `id`.
Пример: (SELECT `id` FROM `users` ....).
Вам не нужен LIMIT 1 в запросе? Просто удалите или перепишите примерный код под свои нужды.
Хз, какой говнокод вы пытаетесь избежать, если у вас элементарно, идентификаторы имеют не уникальные значения.
Честно говоря, я не совсем понял что вы пытаетесь изобрести.
Я привёл вам пример поиска хэша в базе данных, а не пытался написать код за вас.
При поиске нужна только одна колонка (id)? Нет проблем, после SELECT вместо * укажите только `id`.
Пример: (SELECT `id` FROM `users` ....).
Вам не нужен LIMIT 1 в запросе? Просто удалите или перепишите примерный код под свои нужды.
Хз, какой говнокод вы пытаетесь избежать, если у вас элементарно, идентификаторы имеют не уникальные значения.
Потом я походил подумал select id from sessions это всё в массив и уже по массиву искать, а вдруг сессий 20 миллионов, что-то говнецо выходит тоже, мне же нужно всего сравнить с текущей которая создаётся
А вот твои select * + ещё 10 пробежек по колонкам каждой записи которые не относятся никак к задумке
И num_rows проблемная хрень не помню как она работает но она хорошо лопатит каждую строку , лучше count(*)
________
посл. ред. 07.09.2023 в 19:05; всего 6 раз(а); by SNEG
Объясняю , хэш md5 выступает в виде id записи , так от select id from sessions where id = $hash limit 1 , я так и сам могу )))
Потом я походил подумал select id from sessions это всё в массив и уже по массиву искать, а вдруг сессий 20 миллионов, что-то говнецо выходит тоже, мне же нужно всего сравнить с текущей которая создаётся
А вот твои select * + ещё 10 пробежек по колонкам каждой записи которые не относятся никак к задумке
И num_rows проблемная хрень не помню как она работает но она хорошо лопатит каждую строку , лучше count(*)
А что если в этот момент у другого пользователя сгенирировался одинаковый идентификатор, вы ведь это не узнаете, потому-что вы ведете поиск в массиве, а не напрямую с базы данных.
По итогу, есть вероятность что в базе данных будет два одинаковых идентификатора.
________
посл. ред. 07.09.2023 в 19:08; всего 1 раз(а); by SayrusCraft