Подгон картинки под блок DIV

ucTuHa

Новичок
Добрый день.
Делаю на сайте топ5 популярных топиков, в который должна выводиться описание и картинка из базы данных.
Проблема вся в том что в базе данных картинка уже хранится в виде <img scr="картинка"> и я не могу подогнать размер под блок топ5.
Есть какой нибудь инструмент который после выборки картинки из бд сам вставлял бы в него width="100%"?
Сразу формировать базу данных с данным параметром я не могу, так как эта картинка выводится еще в одном месте и не должна растягиваться на 100%.
В css повлиять на нее у меня не получается. Гуглил ничего подобного не нашел.
Заранее спасибо за помощь.
 

Redjik

Джедай-мастер
В html разметке добавь класс к диву в котором находится картинка, если класс уже есть, то в css пишется
PHP:
.класс_дива img{
    width:100%;
}
 

ucTuHa

Новичок
Тогда попутно еще один вопрос.
Я делаю выборку по количеству просмотров, и по ид, но не могу додумать как ограничить выборку к примеру по последним 50 постам. Иначе я беру пост к примеру который был опубликован два месяца назад, накручиваю ему рейтинг и в топ выводится он, а мне нужно что бы выводились из последних новостей.
Вот мой запрос.
PHP:
$result3 = mysql_query("SELECT id, topicname, topicimg FROM news ORDER BY view DESC , id DESC LIMIT 5",$db);
 

ucTuHa

Новичок
Спасибо, но я начинающий и еще не все понимаю, у меня в базе данных нет поля даты публикации, я так понимаю что WHERE можно прикрутить к последним id, Но как?
 

ucTuHa

Новичок
Точнее я понимаю как указать "выводить те записи в которых id выше такого то, но это не выход, хотелось бы как то автоматизировать.
 

Sufir

Я не волшебник, я только учусь
Что-то в таком духе должно получиться:
PHP:
WHERE id > (SELECT MAX(id) FROM news) - 50
А вообще, если по уму, я бы посоветовал хранить дату публикации и не хранить html-теги в базе.
 

ucTuHa

Новичок
Что-то в таком духе должно получиться:
PHP:
WHERE id > (SELECT MAX(id) FROM news) - 50
А вообще, если по уму, я бы посоветовал хранить дату публикации и не хранить html-теги в базе.
PHP:
$result3 = mysql_query("SELECT id, topicname, topicimg FROM news ORDER BY view DESC , id DESC LIMIT 5  WHERE id > (SELECT MAX(id) FROM news) - 50",$db);
В таком виде выдает ошибку на этот запрос.
Я бы не хранил, но там чередует видео, фото, текст, а в моей голове пока не помещается как это реализовать без тэгов в базе, я только учусь.
 

Sufir

Я не волшебник, я только учусь
Выдаёт ошибку и сообщает, что именно не в порядке. У тебя порядок в запросе не верный - смотри мануал по SQL.
 

antson

Новичок
Партнер клуба
ucTuHa
Учет просмотров через поле в самой таблице не удачная идея. В mysql есть понятие Query_cache , а в случае постоянного изменения данных в таблице , он не работает. Так, что если посещаемость ожидается на приличном уровне, то нужно создать отдельную таблицу (ид_новости, просмотры)
и апдейтить ее через INSERT ... ON DUPLICATE KEY UPDATE
Формирование блока топ 5 сделать с кешированием на 15 - 30 минут
Сам топ я бы сделал как вывод лучших за неделю
Select a.* from news a where дата_новости>'расчитаное значение даты на 7 дней назад' left outer join countview b on a.id=b.new_id order by b.countview desc limit 0,5
результат этого запроса кешируется и пока он актуален, то берется из кеша
 

ucTuHa

Новичок
antson
Спасибо большое за совет, буду иметь введу, я тоже думал над тем можно ли как то кешировать, что бы не шерстить каждый раз всю таблицу, теперь знаю что можно.
К сожалению пока привязки темы к дате нет, это буду делать немного позднее, так как не очень много времени.
Не могли бы вы подсказать что не так в моем примере.
 

RealBuddha

Новичок
Да все очень просто, вы уже ORDERом все сделали, ненадо там WHERE > чего-то там. пусть к примеру будет WHERE id<>0 У вас идет два условия сортировки - по просмотрам и по ID поста, везде с максимальными значениями. и с лимитом 5 строк. Все в порядке. Отсеките лишнее от камня и получится алмаз.

Да в строке запроса неправильный порядок - сначала надо WHERE а потом уже условия ORDER сортировки результата насколько я помню... Хотя склероз штука странная...
 

ucTuHa

Новичок
Да все очень просто, вы уже ORDERом все сделали, ненадо там WHERE > чего-то там. пусть к примеру будет WHERE id<>0 У вас идет два условия сортировки - по просмотрам и по ID поста, везде с максимальными значениями. и с лимитом 5 строк. Все в порядке. Отсеките лишнее от камня и получится алмаз.

Да в строке запроса неправильный порядок - сначала надо WHERE а потом уже условия ORDER сортировки результата насколько я помню... Хотя склероз штука странная...
Почему два, мне еще нужно что бы он выборку делал из последних 50 id.
Если не трудно отредактируйте правильно.
 

RealBuddha

Новичок
2 baev Ну почему же... Я же говорю, склероз... а вы сразу прям уж так - не существует...

2 ucTuHa Для начала попробуйте так "SELECT id, topicname, topicimg FROM news WHERE id<>0 ORDER BY view DESC , id DESC LIMIT 5;",$db)

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

Еще попробуйте поменять местами условия сортировки результатов выборки, потому как от этого зависит порядок их применения.

И уж только после того, как вы с этим разберетесь - пробуйте применить поданный вам выше фильтр.
 

RealBuddha

Новичок
И мне кажется, может быть конечно я сейчас скажу какую-то глупость, но чтобы не хранить теги в базе - что действительно создает много проблем особенно с кавычками - может быть стоит написать небольшой парсер? ну, заменяете тег на что-то перед вставкой в базу, а когда достаете - заменяете обратно... Кажется в PHP даже есть встроенные функции для этого... смотрите работу со строками...
 
Сверху