|
|
|
| Данный код выводит 4 новости каждой категории, 3 - просто ссылками (первый запрос), а 1 - ссылка и изображение (2 запрос). Можно ли сделать такой же вывод, но одним запросом к базе, а не двумя.
Спасибо.
Код:
<?php
$query_cat = "SELECT * FROM cat_news";
$result_cat=mysql_query($query_cat) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
if (mysql_num_rows($result_cat)!=0)
{
while($news_cat = mysql_fetch_array($result_cat))
{
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
<td height=1 bgcolor="#2164a3"> </td>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<H2><a href="<?php echo $news_cat["en_name"];?>"><?php echo $news_cat["name"];?></a></H2>
</td>
<td><a href="<?php echo $news_cat["en_name"];?>">
<li>все новости раздела</li>
</a></td>
</tr>
<tr>
<td width="50%" valign="top">
<?php
$query_news = "SELECT * FROM news WHERE category = '$news_cat[id]' order by data DESC limit 1,3";
$result_news=mysql_query($query_news) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
if (mysql_num_rows($result_news)!=0)
{
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<?php
while($news = mysql_fetch_array($result_news))
{
?>
<tr>
<td class="block">
<?php
echo "<span class=data>"."$ndata"." · ".$news["author"]."</span><br>";
?>
<a href="<?php echo $news["id"]; ?>"><?php echo $news["title"]; ?></a></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</td>
<?php
$query_inews = "SELECT * FROM news WHERE category = '$news_cat[id]' order by data DESC limit 1";
$result_inews=mysql_query($query_inews) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
if (mysql_num_rows($result_inews)!=0)
{
while($inews = mysql_fetch_array($result_inews))
{
?>
<td width="50%" valign="top" bgcolor="#E2EBF5">
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
<td height=1 bgcolor="#2164a3"> </td>
</table>
<table width="100%" border="0" cellspacing="10" cellpadding="0">
<tr>
<td valign="top" rowspan="2">
<div style="width:110px;height:105px; background-image:url(/img/in_shad.gif); background-position:bottom; background-repeat:no-repeat;"><img src="/news/img/01000000.jpg" width="100" height="90" class="w5i" alt="<?php echo htmlspecialchars($inews["title"]);?>" title="<?php echo htmlspecialchars($inews["title"]);?>"></div>
</td>
<td width="100%" valign="top"><a href="<?php echo $inews["id"]; ?>"><?php echo $inews["title"]; ?></a></td>
</tr>
<tr>
<td width="100%" valign="top">
<?php echo $inews["subtitle"]; ?>
</td>
</tr>
</table>
</td>
<?php
}
}
?>
</tr>
<tr>
<td colspan="2" height="12"> </td>
</tr>
</table>
<?php
}
}
?>
|
| |
|
|
|
|
|
|
|
для: kis-kis
(10.05.2007 в 17:23)
| | Крайне не удобно читать такой код. Очень много мусора. Не делаете отступы и зачем-то скопировали и HTML-код. | |
|
|
|
|
|
|
|
для: Unkind
(10.05.2007 в 17:39)
| | Иначе, будет, как мне кажется, не понятна суть данного вывода...) | |
|
|
|
|
|
|
|
для: kis-kis
(10.05.2007 в 17:42)
| | Ммм. Например, bgcolor="#E2EBF5" поможет нам разобраться в Вашем коде? А чем отступы помешают? :)
Сравните:
<?php
if(condition)
{
while(condition)
{
if(condition)
{
//Code
}
}
}
?>
|
и
<?php
if(condition)
{
while(condition)
{
if(condition)
{
//Code
}
}
}
?>
|
Что приятнее и удобнее читать? | |
|
|
|
|
|
|
|
для: kis-kis
(10.05.2007 в 17:23)
| | Вас не затруднит прикрепить фрагмент дампа со структурой и куском данных таблиц?
P.S. Касательно стиля Unkind прав. Вы подчеркиваете стилем оформление (дизайнерскую часть разработки), в то время как вопросы то у Вас по алгоритму. А алгоритм как раз и остается за кадром.
Но это хотя и тяжело, но терпимо, если есть возможность поглядеть скрипт в действии.
А без исходных табличных данных даже поглядеть толком не получается. | |
|
|
|
|
|
|
|
для: Trianon
(10.05.2007 в 19:11)
| | Спасибо за понимание...
CREATE TABLE `cat_news` (
`id` int(11) NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`en_name` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
--
-- Дамп данных таблицы `cat_news`
--
INSERT INTO `cat_news` (`id`, `name`,
`en_name`) VALUES (1, 'Политика',
'politics');
INSERT INTO `cat_news` (`id`, `name`,
`en_name`) VALUES (2, 'Общество',
'society');
INSERT INTO `cat_news` (`id`, `name`,
`en_name`) VALUES (3, 'Экономика',
'economy');
INSERT INTO `cat_news` (`id`, `name`,
`en_name`) VALUES (4, 'Спорт', 'sport');
INSERT INTO `cat_news` (`id`, `name`,
`en_name`) VALUES (5, 'Происшествия',
'incident');
INSERT INTO `cat_news` (`id`, `name`,
`en_name`) VALUES (6, 'Культура',
'culture');
INSERT INTO `cat_news` (`id`, `name`,
`en_name`) VALUES (7, 'Авто', 'avto');
|
CREATE TABLE `news` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`subtitle` varchar(255) NOT NULL default '',
`icon` varchar(50) NOT NULL default '',
`short_mess` text NOT NULL,
`full_mess` text NOT NULL,
`author` text NOT NULL,
`url_author` text NOT NULL,
`category` int(1) default '0',
`data` datetime NOT NULL default '0000-00-00 00:00:00',
`status` int(1) default '0',
`comments` int(1) default '0',
`news_read` smallint(6) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `category` (`category`),
KEY `comments` (`comments`),
KEY `news_read` (`news_read`),
KEY `data` (`data`),
KEY `status` (`status`),
FULLTEXT KEY `full_mess` (`full_mess`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=4 ;
--
-- Дамп данных таблицы `news`
--
INSERT INTO `news` (`id`, `title`,
`subtitle`, `icon`, `short_mess`,
`full_mess`, `author`, `url_author`,
`category`, `data`, `status`, `comments`,
`news_read`) VALUES (1, 'Самые дорогие
рестораны мира', '', '', 'Деловой журнал
Forbes составил список самых дорогих
ресторанов в мире.', 'Деловой журнал Forbes
составил где не представлена служба Zagat
Survey, в частности в Москве, были приняты
во внимание рекомендации, которые дают
своим гостям местные пятизвездочные отели.
\r\nУказанные суммы в долларах являются
ценой обеда на одного человека, включая
один безалкогольный напиток и чаевые, или
же фиксированную цену на обед.', '', '', 2,
'2007-05-10 19:51:57', 0, 0, 1);
INSERT INTO `news` (`id`, `title`,
`subtitle`, `icon`, `short_mess`,
`full_mess`, `author`, `url_author`,
`category`, `data`, `status`, `comments`,
`news_read`) VALUES (2, 'Харуки Мураками
наградили премией Кафки', '', '', 'Японский
прозаик Харуки Мураками получил престижную
чешскую награду в области литературы -
премию Франца Кафки, сообщает AFP.
\r\nНаграда, учрежденная в 2001 году, была
вручена Мураками на торжественной
церемонии, состоявшейся в столице Чехии -
Праге. ', 'Японский прозаик вышел в 1987
году и вскоре стал международным
бестселлером. Среди других известных
произведений автора - "Охота на овец",
"Dance, dance, dance" и "Хроники заводной
птицы". \r\nВ Японии писателя
недолюбливают, считая его слишком
"американизированным" и не пропагандирующим
истинную японскую культуру.', '', '', 6,
'2007-05-10 19:52:23', 0, 0, 0);
INSERT INTO `news` (`id`, `title`,
`subtitle`, `icon`, `short_mess`,
`full_mess`, `author`, `url_author`,
`category`, `data`, `status`, `comments`,
`news_read`) VALUES (3, 'Мичуринцы
отравились суррогатным алкоголем', '', '',
'Тридцать шесть человек, двадцать восемь
мужчин и восемь женщин, находятся сейчас в
больницах боярышника, "Антисептин", а также
"зелье" неизвестного происхождения.
\r\nВсего же по Тамбовской области, по
данным на 30 октября, суррогатным алкоголем
отравился 41 человек - в Жердевском,
рейдовые проверки аптечных пунктов и всех
мест, где производится продажа алкоголя.
Кроме того, усилена разъяснительная работа
среди населения области.', '', '', 5, '2007-05-10 19:52:57', 0, 0, 0);
|
| |
|
|
|
|
|
|
|
для: kis-kis
(10.05.2007 в 19:53)
| | данных в news Вы явно пожалели. показали бы строк 50... из разных разделов.
Но - прикрепив архив с дампом к сообщению.
Сейча попробую эту структуру воспроизвести. | |
|
|
|
|
|
|
|
для: kis-kis
(10.05.2007 в 19:53)
| | Так. Собственно, уже всё ясно. От третьего запроса можно избавиться.
Вместо него можно перемотать на начало поток ответа второго запроса - они ж одинаковы.
фактически вместо строк
<?php
$query_inews = "SELECT * FROM news WHERE category = '$news_cat[id]' order by data DESC limit 1";
$result_inews=mysql_query($query_inews) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
if (mysql_num_rows($result_inews)!=0)
{
while($inews = mysql_fetch_array($result_inews))
{
|
можно поставить
<?php
if (mysql_num_rows($result_news)!=0)
{
mysql_data_seek($result_news);
$inews = mysql_fetch_array($result_news))
{
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.05.2007 в 20:58)
| | Избавиться от второго запроса и вывести всё вообще единственным запросом (не создав при этом изрядной нагрузки на сервер БД) куда сложнее. У меня не получилось . | |
|
|
|
|
|
|
|
для: Trianon
(10.05.2007 в 21:04)
| | Спасибо. Сейчас попробую...) | |
|
|
|
|