admin / 21.05.2018
Роман Чемисов[досье] Спасибо, но это не совсем то что нужно, мне нужно вывести последнии записи всех пользователей которые писали в таблицу.
Дмитрий[досье]
Не ясно как Вы определяете признак "последнести"…
Дмитрий[досье]Вам надо вывести последнее сообщение для каждого пользователя, присутствующего в таблице ?
Роман Чемисов[досье] признак "последности" определяется по масимальному полю 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
Содержание
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) . ‘">« Назад</a>’; |
Функцию get_permalink() я использовал для получения ссылки на пост.
Или чуть-чуть усложним:
$pred_post = get_previous_post(); // получили и записали в переменную объект предыдущего постаecho'<a href="’ . get_permalink($pred_post) . ‘" title="К посту: ‘ . esc_attr($pred_post->post_title) . ‘">« Назад</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.
Спасибо!
upd. Сделал так:
Но так приходится прописывать абсолютный путь к изображению, что плохо, т.к. при смене домена этот путь придется менять вручную. Можно ли как-то изменить так, чтобы путь был относительно папки темы?
Вот как это выглядит в макете:
Отредактированно skodnik (08.01.2012 21:11:25)
FILED UNDER : IT