admin / 21.05.2018

MySQL Выбрать первый последний id (Выбрать первую последнюю запись) | Labdes

Роман Чемисов[досье] Спасибо, но это не совсем то что нужно, мне нужно вывести последнии записи всех пользователей которые писали в таблицу.

Дмитрий[досье]
Не ясно как Вы определяете признак "последнести"…

Дмитрий[досье]Вам надо вывести последнее сообщение для каждого пользователя, присутствующего в таблице ?

Роман Чемисов[досье] признак "последности" определяется по масимальному полю id которое auto_increment

Прокаев2[досье] Да, в таблицу добавляются записи от пользователей, запросом нужно выбрать последнии вставленные записи на момент этого запросы,другими словами вывести поля с максиальным id по полям user

Евгений Седов aka KPbIC[досье] хорошая шутка =)

наверное, будет правильнее хранить id последнего сообщения в таблице users ?

Дмитрий[досье], использование MAX(id) не совсем правильно. Нужно искать ближайшую дату, а не максимальный id. Если данные из таблицы удаляются, то возможно заполнение фрагментированного пространства таблицы.

Филипп Ткачев[досье] если рассматривать вариант что записи вставляются последовательно, то запись с максимальным ID и будет записью с максимальной датой. И не важно, что там удаляется и фрагментируются.

Если над таблицами производится операция оптимизации, а такое иногда случается, MySQL начинает вставлять записи в дырки. Я с этим уже сталкивался и хочу предостеречь от ошибочного подхода. Если писать приложения изначально правильно, то устраняются самые страшные ошибки — ошибки проектирования.
Использование неверных подходов в программировании приводит к труднообнаружимым ошибкам, которые проявляются очень редко. А переписывание кода — двойная плата.
Из структуры таблицы видно, что записи из нее могут и будут удаляться, а значит будет фрагментация таблицы. Если данные не удалять, то запрос будет работать быстро при объеме до 10000 сообщений, а потом начнутся тормоза.

Люди нужна помощь или совет, есть таблица куда добавляются сообщения пользователей, например:

CREATE TABLE `last_message` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `user` CHAR(10) NOT NULL, `message` TEXT NOT NULL, `data` DATETIME NOT NULL, PRIMARY KEY (`id`), INDEX `user` (`user`) ) ENGINE=MyISAM

Нужно составить запрос, чтобы выводил последнии записи пользователей на момент этого запроса, LAST_INSERT_ID не помогает почему то =(

Есть такое решение задачи:

SELECT* FROM `last_message`
WHERE `id` IN(
SELECT MAX(`id`)
FROM `last_message`
GROUP BY user)

НО, проверив это запрос EXPLAINom хотелось бы его улучшить =)
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY last_message ALL NULL NULL NULL NULL 30 Using where
2 DEPENDENT SUBQUERY last_message index NULL symbol 30 NULL 1 Using filesort

Дмитрий[досье]SELECT * FROM `last_message` ORDER BY `id` DESC LIMIT 1
Если исходить из названия таблицы, я бы предложил: SELECT * FROM last_message
Аналогичная ситуация, только таблица чуть сложнее.
5 сек из таблицы в 1 500 000 записей. Core2Duo E8400. WinXP.
6.3969 сек. из таблицы в 1 989 929 записей. AMD Athlon 64 X2 4200+, Linux SELECT * FROM (SELECT * FROM `last_message` ORDER BY `data` DESC) i GROUP BY i.`user`

  1. прочесть про нормализацию БД
  2. добавить индекс на поле даты-времени.
  3. пользователей хранить в отдельной таблице
  4. можете добавить выражение SQL_CACHE, иногда помогает.
Филипп Ткачев[досье] Я вот такое решение пока нашел: SELECT tab1.user,tab1.data FROM last_message tab1 INNER JOIN (SELECT user, MAX(id) AS maxid FROM last_message GROUP BY user ORDER BY NULL) tab2 ON (tab1.id = tab2.maxid)

как сделать выборку последней записи??

Mysql получить последнюю запись в таблице. Нужен запрос который выведет последнюю запись в таблице

ROCK

mysql получить последнюю запись в таблице. Нужен запрос который выведет последнюю запись в таблице.

Soul

select * from таблица order by id desc limit 1

Незлой

SELECT *
FROM tablename
ORDER BY ID DESC
LIMIT 1

ID — уникальный autoincremental ключ

Makeup man

Мискул все изживает свое…

пользуйтесь мискули или пдо.

Полосатыйжираф Алик

В SQL для слова последний обязательно нужно указывать «в каком порядке». Просто «последняя» запись не определена.

IRQ

Последнюю по какому принципу? Прядок добавления строк не гарантирует их хронологическую последовательность.

Андрей Яковщенко

SELECT MAX(id) FROM ‘table’

Александр

Данные хранятся в таблице без какого-либо определённого порядка.

Раз и навсегда разбираемся со ссылками на следующую и предыдущую записи!

Уверен, что так или иначе вы сталкивались с задачей вывода на какой-то конкретной записи ссылок на предыдущую и следующую запись. Далеко за примером ходить не надо — возьмём хотя бы стандартную тему Twenty Fifteen.

Возможно вы даже знакомы с функциями , или (как раз этой функцией и реализовано в теме Twenty Fifteen.

Каждая из этих функций имеет свои параметры и в какой-то степени довольно гибкая, однако и этого порой хватает не всегда!

Так вот, если вы не можете вписать вашу вёрстку в перечисленные выше функции, я рекомендую вам взглянуть на get_previous_post() (предыдущая запись) и get_next_post() (следующая запись) — дело в том, что эти функции возвращают не просто URL и не просто какой-то HTML-элемент, а целый объект поста, которым уже мы можем распоряжаться как угодно!

Вообще принцип работы функции очень простой:

$pred_post = get_previous_post(); // получили и записали в переменную объект предыдущего постаecho'<a href="’ . get_permalink($pred_post) . ‘">&laquo; Назад</a>’;

Функцию get_permalink() я использовал для получения ссылки на пост.

Или чуть-чуть усложним:

$pred_post = get_previous_post(); // получили и записали в переменную объект предыдущего постаecho'<a href="’ . get_permalink($pred_post) . ‘" title="К посту: ‘ . esc_attr($pred_post->post_title) . ‘">&laquo; Назад</a>’;

Как видите, в примере я добавил всплывающую подсказку через HTML-атрибут title.

Выборка последних записей из таблицы

Возникает вопрос — для чего нам функция esc_attr()? Всё очень просто, она нужна на тот случай, если вдруг в заголовке поста укажут какие-то символы, которые нельзя помещать в HTML-атрибуты, в этом случае функция просто спасёт нашу вёрстку.

И да, у функции есть параметры, связаны они с рубриками, метками и таксономиями, если точнее, то они просто позволяют сделать так, чтобы брался не любой предыдущий/следующий пост, а именно тот, который отмечен точно такой же меткой, что и текущий, или находится точно в такой же рубрике. Например для меток это будет выглядеть следующим образом:

$pred_post = get_previous_post(true, », ‘post_tag’); // первый параметр равен true — значит ДА, брать посты по тем же меткам// во втором параметре можно указать через запятую или в массиве ID меток, которые нужно проигнорировать// третий параметр — название таксономии, как раз для меток это post_tag

Более подробный пример — на видео:

Почему бы для полного счастья ещё и не настроить типы записей?

По умолчанию для ссылок на предыдущий и следующий пост берутся записи такого же типа, что и текущая.

А что делать, если мы хотим, чтобы там отображались все типы или допустим какие-то определённые?

Предлагаю хукануть это через , через или (или сразу через оба!)

add_action(’get_previous_post_where’, ‘misha_posts_and_page’, 20); add_action(’get_next_post_where’, ‘misha_posts_and_page’, 20);   function misha_posts_and_page($where){   // запрос выглядит "WHERE p.post_date $op %s AND p.post_type = %s $where"// самое главное, что параметр $op нифига не передаётся// но так как не хочется мутить два похожих хука, я сделаю просто str_replacereturnstr_replace(array("p.post_type = ‘post’", "p.post_type = ‘page’"), "(p.post_type = ‘post’ OR p.post_type = ‘page’)", $where);   }

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

Привет!

Прошу помощи или совета.
Задача стоит так — необходимо сделать кнопки предыдущая и следующая запись. Все было бы просто если бы нужно было сделать текстовую ссылку, мне предстоит сделать кнопку картинкой.
Стандартные

и аналог для prev возвращяют всю конструкцию ссылки с открывающим тегом <а> и закрывающим.
Как получить саму ссылку, т.е. то, что в href="". Или как в стандартную функцию вместо текста поставить img.

MySQL — выбор последней записи каждым из 10 последних авторов

Спасибо!

upd. Сделал так:

Но так приходится прописывать абсолютный путь к изображению, что плохо, т.к. при смене домена этот путь придется менять вручную. Можно ли как-то изменить так, чтобы путь был относительно папки темы?

Вот как это выглядит в макете:

Отредактированно skodnik (08.01.2012 21:11:25)

Код:

<?php next_post_link(‘%link’); ?>

Код:

<?php previous_post_link(‘%link’, ‘<img src="http:// … /images/prev.png" width="35" height="35" alt="Предыдущая запись" />’); ?>


Мой персональный блог — blog.verha.net.

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*