Захват первой строки только в запросе mysql
если у меня был запрос, например
select * from tbl_foo where name = 'sarmen'
и эта таблица имеет несколько экземпляров name = sarmen, как я могу фактически присвоить номера строк каждой строке, не создавая столбец, который автоматически загружается? У меня есть причина того, что я делаю, и мне не нужен файл auto_incrimented col в моем примере.
поэтому, если каждая строка присваивает номер виртуальной строки через sql или, возможно, php, я смогу распечатать первую строку или последнюю строку в любое время, когда мне нужно.
Thnx
Ответы
Ответ 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