У меня есть ряд значений в базе данных, которые мне нужно извлечь, чтобы создать линейную диаграмму. Поскольку я не требую высокого разрешения, я бы хотел перепрограммировать данные, выбрав каждую пятую строку из базы данных.
Как вы выбираете каждую n-ю строку из mysql
Ответ 1
SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, [column name]
FROM (
SELECT @row :=0) r, [table name]
) ranked
WHERE rownum % [n] = 1
Ответ 2
Вы можете попробовать mod 5, чтобы получить строки, где идентификатор кратен 5. (Предполагая, что у вас есть какой-то столбец идентификатора, который последовательна.)
select * from table where table.id mod 5 = 0;
Ответ 3
Поскольку вы сказали, что используете MySQL, вы можете использовать пользовательские переменные для создания непрерывной нумерации строк. Вы должны поместить это в производную таблицу (подзапрос), хотя.
SET @x := 0;
SELECT *
FROM (SELECT (@x:[email protected]+1) AS x, mt.* FROM mytable mt ORDER BY RAND()) t
WHERE x MOD 5 = 0;
Я добавил ORDER BY RAND()
, чтобы получить псевдослучайную выборку вместо того, чтобы каждый пятый ряд неупорядоченной таблицы был в выборке каждый раз.
Анонимный пользователь попытался изменить это, чтобы изменить x MOD 5 = 0
на x MOD 5 = 1
. Я изменил его обратно к оригиналу.
Для записи в этом состоянии можно использовать любое значение от 0 до 4, и нет причин предпочитать одно значение над другим.
Ответ 4
SET @a = 0;
SELECT * FROM t where (@a := @a + 1) % 2 = 0;
Ответ 5
Я искал что-то вроде этого. Ответ Тейлора и Билла заставил меня улучшить свои идеи.
table data1 имеет поля read_date, значение мы хотим выбрать каждую 2d-запись из запроса, ограниченного диапазоном read_date имя производной таблицы произвольно и здесь называется DT
запрос:
SET @row := 0;
SELECT * FROM ( SELECT @row := @row +1 AS rownum, read_date, value FROM data1
WHERE read_date>= 1279771200 AND read_date <= 1281844740 ) as DT WHERE MOD(rownum,2)=0
Ответ 6
$Query = "SELECT *
FROM (
SELECT @row := @row +1 AS rownum, posts.*
FROM (
SELECT @row :=0) r, posts
) ranked
WHERE rownum %3 =1";
где сообщения - это моя таблица:
Ответ 7
Вы можете использовать этот запрос,
set @n=2; <!-- nth row -->
select * from (SELECT t.*,
@rowid := @rowid + 1 AS ID
FROM TABLE t,
(SELECT @rowid := 0) dummy) A where A.ID mod @n = 0;
или вы можете заменить n своим n-ным значением