Подтвердить что ты не робот

Захват первой строки только в запросе mysql

если у меня был запрос, например

select * from tbl_foo where name = 'sarmen'

и эта таблица имеет несколько экземпляров name = sarmen, как я могу фактически присвоить номера строк каждой строке, не создавая столбец, который автоматически загружается? У меня есть причина того, что я делаю, и мне не нужен файл auto_incrimented col в моем примере.

поэтому, если каждая строка присваивает номер виртуальной строки через sql или, возможно, php, я смогу распечатать первую строку или последнюю строку в любое время, когда мне нужно.

Thnx

4b9b3361

Ответ 1

Чтобы вернуть только одну строку, используйте LIMIT 1:

SELECT *
FROM tbl_foo
WHERE name = 'sarmen'
LIMIT 1

В не имеет смысла говорить "первая строка" или "последняя строка", если у вас нет предложения ORDER BY. Предполагая, что вы добавляете предложение ORDER BY, вы можете использовать LIMIT следующими способами:

  • Чтобы получить первую строку, используйте LIMIT 1.
  • Чтобы получить вторую строку, вы можете использовать предел со смещением: LIMIT 1, 1.
  • Чтобы последняя строка инвертировала заказ (измените ASC на DESC или наоборот), используйте LIMIT 1.

Ответ 2

Вы не указали, как определяется порядок, но это даст вам значение ранга в MySQL:

SELECT t.*,
       @rownum := @rownum +1 AS rank
  FROM TBL_FOO t
  JOIN (SELECT @rownum := 0) r
 WHERE t.name = 'sarmen'

Затем вы можете выбрать, какие строки вы хотите, исходя из значения ранга.

Ответ 3

Вы можете получить общее количество строк, содержащих определенное имя, используя:

SELECT COUNT(*) FROM tbl_foo WHERE name = 'sarmen'

Учитывая счет, теперь вы можете получить n-я строка, используя:

SELECT * FROM tbl_foo WHERE name = 'sarmen' LIMIT (n - 1), 1

Где 1 <= n <= COUNT (*) из первого запроса.

Пример:

получение третьей строки

SELECT * FROM tbl_foo WHERE name = 'sarmen' LIMIT 2, 1

Ответ 4

используйте псевдоколону ROWNUM