Intereting Posts
Как получить параметр конструктора через отражение? Изменение цвета шрифта на основе фона Правильный заголовок php mysql blob display image bintohex () и random_bytes () не определены в PHP 5.6 на Linux Как включить gzip? Являются ли одинарные кавычки автоматически экранированными в PHP? Тогда в чем нуждаются чистки? Обновление старых сохраненных паролей md5 в PHP для повышения безопасности PHP-сессия NTLM с cURL Не удалось выполнить запрос AJAX POST на ту же страницу (с примером) Facebook – Ошибка анализа URL-адреса ввода, данные не были кэшированы или данные не были очищены Модификатор Smarty Как создать процедуру, которая выполняет аналогичную работу с моей php-функцией (ускорение оптимизации) Как использовать ACL для фильтрации списка объектов домена в соответствии с разрешениями определенного пользователя (например, EDIT)? PHP создает совершенно белую страницу, никаких ошибок, журналов или заголовков. Параметр переопределить метод с дочерним интерфейсом в качестве нового параметра

Как получить номер строки ID таблицы sql?

Предположим, мне нужно напечатать 3, 5, 9, 20, 34 и так далее …

Строки по положению не имеют реального значения в базе данных (по крайней мере, я не могу придумать ни одного). Почему вам небезразлично его фактическое расположение строк?

Как вы узнали, что третья запись – это запись, которую вы хотите удалить? Сопоставьте идентификатор, сопоставьте фразу в другом поле, сделайте что-нибудь, чтобы однозначно идентифицировать запись как запись, к которой вы хотите получить доступ. Выполнение этого путем размещения строки не сделает этого для вас.

Если у вас есть пять записей, которые соответствуют точно, и вы хотите их удалить, то добавьте LIMIT 1 в конец вашего оператора DELETE. Если они точны, строка не имеет значения. 3-й или 5-й или 7-й вопрос не имеет значения, поскольку они точно соответствуют вашему запросу. Поэтому удалите один из ваших соответствующих запросов.

Теперь кажется, что вы показываете пользователям таблицу данных в некотором порядке, которая может дублироваться или не дублироваться, и позволяет им удалять строку. Вы берете фактическое местоположение строки вместо хранения Первичного ключа с каждой отображаемой строкой. Затем, когда пользователь выбирает удаление, вы просто используете прикрепленный первичный ключ к строке и удаляете эту строку.

Вы говорите: «Первичный ключ с несколькими другими полями одинаковый» – это не может быть правдой, поскольку вы не можете иметь идентичные первичные ключи. Теперь я думаю, что у вас есть некоторые недостатки в дизайне базы данных. Отправьте схему таблицы и образец того, что вы делаете. Нет смысла продолжать, если бы вы поддержали себя в углу с дизайном (что звучит)

(Я не могу комментировать другие сообщения, поэтому обновления должны быть отредактированы в этом сообщении)

Вы также можете использовать переменную номера строки:

SELECT * FROM ( SELECT t.*, @rownum = @rownum + 1 AS rank FROM TABLE t, (SELECT @rownum := 0) r ORDER BY ID LIMIT 0, 34 ) Q WHERE rank in (3, 5, 9, 20, 34) 

Я бы попытался использовать LIMIT smartly, иначе он будет сканировать всю вашу таблицу каждый раз.


Основываясь на вашем описании вашего сценария …

мой сценарий: мне нужно удалить только одну строку … есть несколько одинаковых строк .. поэтому использование delete с предложением where удалит все из них. Также, скажем, есть 5 одинаковых строк .. и мне нужно удалить треть из этих 5 строк …

Вам действительно нужно быть осторожным с этим, иначе вы удалите неправильные строки. Подумайте о хорошем критерии, который бы отличал строки, которые вы хотите удалить из других строк, скажем .. вы хотите удалить новейшие или все, кроме новейших …

Вы можете использовать расширенную версию трюка @rownum, чтобы удалить Nth из каждой группы. Но прежде чем я пойду, что было бы лучше узнать больше о вашей конкретной проблеме.


А теперь вот вышла обезьяна из рукава:

Предположим, что существует 5 одинаковых строк. Пользователь нажимает на 3-ю строку и просит удалить ее … где запрос не будет эффективным, поскольку он удаляет первую строку, которая соответствует предложению where или всем строкам, которые соответствуют ему .. как это я удаляю только третью строку и оставляю всех остальных нетронутыми .. ???

Забудьте все, что я сказал. Вам нужно AUTO_INCREMENT поле AUTO_INCREMENT в вашей таблице, однозначно идентифицируя ваши записи. Затем вы можете использовать DELETE FROM table WHERE id = $id . Благодаря OMG Ponies для терапии OP;)

OFFSET часть предложения LIMIT работает с запросом SELECT.

Что ты хочешь делать??

Строки в таблице SQL не находятся в определенном порядке. Вы можете заказать их по определенному полю, например, ID, который, как я полагаю, является значением автоматического приращения. Если вы хотите, чтобы вторая строка была отсортирована по идентификатору, вы можете выполнить запрос, например

 SELECT * FROM MyTable ORDER BY ID LIMIT 1,1 

Чтобы получить строку 19, вы сделали бы

 SELECT * FROM MyTable ORDER BY ID LIMIT 18,1 

Используйте инструкцию limit для определенного набора строк. Если вам нужны строки с 10 по 19, вы можете использовать

 SELECT * FROM MyTable ORDER BY ID LIMIT 9,10 

В предельном выражении первое число представляет номер строки (на основе 0), а второе число – количество возвращаемых строк.