Гуру, прошу помощи у вас php+mysql

12
[Удален]
919

Ребята, прошу вашей помощи, тема как то подмалась но так и не пришли к выводу, вообщем такой код на сайте встречается 11 раз, тоесть 11 боков с измененным $file="cache/tmp/news.txt"; и catid = 1. Дело в том что я хочу как то упростить его по выборке и сделать один блок, с одной выборкой, Прошу совета как можно реализовать такое, с пхп и мускулом не ас.

Сам бок:

<?php


if(!defined("DNREAD")) exit();

global $db,$basepref;

$times = time()-1800;
$file="cache/tmp/news.txt";
if ((filemtime($file)) && (filemtime($file)>$times)) {

$cache = @fopen($file, "r");
$bt = fread($cache, filesize($file));
fclose($cache);
}
else {

$bt ="<table border=0 cellpadding=0 cellspacing=3 width=100%><tr>";

$inqnl = $db->query("SELECT title,image_thumb,newsid,textmore,textshort FROM ".$basepref."_news WHERE catid = 1 LIMIT 0,1");

if($db->numrows($inqnl)>0){
while($item = $db->fetchrow($inqnl)){

$titlenl = str_replace('\"','"',$item['title']);
$textnl = substr(str_replace('\"','"',$item['textshort'].$item['textmore']),0,350);
$text = strip_tags(notslashes(preparse($textnl,THIS_TRIM)));

$bt.="<td width=60% align=\"left\" valign=\"top\"><div class=\"zagolo\"><b><a href=\"/news/a-".$item['newsid'].".html\" >$titlenl</a></b></div>";
$bt.="<div><a href=\"/news/a-".$item['newsid'].".html\"><img class=\"thumb2\" src=\"".$item['image_thumb']."\" align=\"left\" border=\"0\" width=\"150\" height=\"120\" alt=\"".$item['title']."\"></a><div style=\"font-size:12px;\">$text...</div></div>
<div class=\"blocktext4\"><a href=\"/news.rss\" title=\"Экспорт новостей в формате RSS 2.0\"><img src=\"/up/rss.png\" alt=\"Экспорт новостей в формате RSS 2.0\" border=\"0\"></a><a href=\"/news/a-".$item['newsid'].".html\"> ".$lang['news_read']."</a></div></td>
";

}
}

$bt.="<td width=40% align=\"left\" valign=\"top\">";

$inqnl = $db->query("SELECT title,newsid,public FROM ".$basepref."_news WHERE catid = 1 LIMIT 1,5");

if($db->numrows($inqnl)>0){
while($item = $db->fetchrow($inqnl)){

$titlenl = str_replace('\"','"',$item['title']);

$bt.="<div class=\"zagola\"><font class=dates>".date('d.m.Y', $item['public'])."</font> <b><a href=\"/news/a-".$item['newsid'].".html\">$titlenl</a></b></div>";

}
};

$bt.="</td></tr></table>";

$cache = @fopen($file, "wb");
if (!is_resource($cache)) { echo "Не возможно открыть директорию \"cache/tmp\" для записи ! Выставите на эту директорию соответствующие атрибуты !"; exit; }
fwrite($cache,$bt);
fclose($cache);
}

return $bt;
?>

KosoyRoman добавил 19.05.2008 в 16:58

Прошу прощения, блок отображает последнюю новость и еще + 5 сылок на последнни новости за исключением последней

СД
На сайте с 17.02.2008
Offline
20
#1
KosoyRoman:
Ребята, прошу вашей помощи, тема как то подмалась но так и не пришли к выводу, вообщем такой код на сайте встречается 11 раз, тоесть 11 боков с измененным $file="cache/tmp/news.txt"; и catid = 1. Дело в том что я хочу как то упростить его по выборке и сделать один блок, с одной выборкой, Прошу совета как можно реализовать такое, с пхп и мускулом не ас.

без AS никак

Деньги ... легко. () я плохой ребенак, люблю пиво и ненавижу даунов оставил хамский коммент и не подписался? Мог бы и не трудиться, на уродов не в обиде)
tommy-gung
На сайте с 22.11.2006
Offline
304
#2

создайте функцию и передавайте параметры $file и $catid

хотя при каждом вызове по 2 запроса к бд получается мин 22 запроса. Может как-то проще можно решить, если б знать задачу и все условия

Здесь не могла быть ваша реклама
T
На сайте с 23.10.2005
Offline
60
#3

1. что такое "бок"?

2. судя по всему это код функции (globals, return) и в запросе к базе в качестве таблицы базы стоит переменная $basepref, которая при каждом вызове м.б разная. Если таблицы разные, то сэкономить на запросах не удастся.

вопрос некоректный, т.к. код некорректный (неполный).

DI
На сайте с 03.01.2007
Offline
123
#4

Ага, помню я эту тему, когда из ТС вытаскивали подробности по 1 килобайту в сутки:)

ТС, давно бы заплатили 10 баксов какому-нибудь фрилансеру и он бы сделал все в лучшем виде.

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
СД
На сайте с 17.02.2008
Offline
20
#5
topol:
Если таблицы разные, то сэкономить на запросах не удастся.

ничего подобного ещё как удастся, есть нормальное рабочее решение 1 запросом сделать нужную выборку и при этом ни напрягать ни мускульный серв ни хост.. но ТС видать правильных путей не ищет и хочет как то (прошу прощение) через попу все сделать..

СиДжей добавил 19.05.2008 в 21:07

если бы DenIT не кинул линк на предыдущий трейд.. то можно было опять кашу наворотить, научитесь правильно тему раскрывать!

данная задача решается двумя путями

1. оператором AS

2. Проектирование базы данных

На сколько я понял 1 вариант не устраивает Вас, остается второй вариант.

Создайте доп. таблицу:

id | id_catalog | id_news | data

и при добавление новости в эту таблицу вписывайте id новости и id каталога после чего удаляете из таблицы старую новость, собственно всё. потом 1 запросом (при помощи связки) делаем выборку новостей.

DI
На сайте с 03.01.2007
Offline
123
#6
СиДжей:
ничего подобного ещё как удастся, есть нормальное рабочее решение 1 запросом сделать нужную выборку и при этом ни напрягать ни мускульный серв ни хост..

Кстати не факт, как раз недавно решал схожую задачу... Совесть (и данные, полученные при тестировании) не позволили дергать одним запросом 10-20 таблиц, поэтому набросал 2 функции, работающие по второму варианту, через таблицу-связку.

Но в данном топике рассматривается исключительно вариант "упрощения" кода, а не производительности... Т.к. видимо автор замучался по 11 раз править жестко вшитый html-код, если необходимо чуть-чуть поправить вывод:) Поэтому самый оптимальный вариант, ИМХО - через функцию.

ТС, читайте: http://ru2.php.net/manual/ru/language.functions.php

СД
На сайте с 17.02.2008
Offline
20
#7
DenIT:

Но в данном топике рассматривается исключительно вариант "упрощения" кода, а не производительности...

В том то и дело что ТС пишет о производительности, в старой ветке он указывает на дергонье мускула) я надеюсь он 20 раз только дергает мускул.. хотя возможно он 20 раз при этом конектится и дисконектится 😂 в этом мири все возможно )))

[Удален]
#8

Нет, мне нужно именно производительность, структура таблицы простая, (newsid catid text). Всё из одной таблици

KosoyRoman добавил 20.05.2008 в 11:38

$ArrayWithID = array(1,2,3);
$inqnl = $db->query("SELECT * FROM ".$basepref."_news WHERE catid IN (".implode(",",$ArrayWithID).") LIMIT 0,1");

А как можно при таком раскладе отсеять по catid полученые данные?

СД
На сайте с 17.02.2008
Offline
20
#9
KosoyRoman:
А как можно при таком раскладе отсеять по catid полученые данные?

код ваще бредовый, абасобенно рождение массива с тримя ID и LIMIT 0, 1 ))))

Мой Вам совет, научитесь расскрывать суть вопросов, а то читаешь их и нифига не понятно что хотел узнать автор

[Удален]
#10

/ru/forum/comment/2889348

$ArrayWithID = array(1,2,3);
$inqnl = $db->query("SELECT * FROM ".$basepref."_news WHERE catid IN (".implode(",",$ArrayWithID).") LIMIT 0,30");

ссори забыл лимит заменить

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий