|
|
|
| Скажите пожалуйста, можно ли вот этот код, как-то упростить???
Что бы он как можно меньше мучал базу?
<?
//------------------------------
$my->sql_query="select * from gallery_picture where (datas<'09.09.2006')";
$my->sql_execute();
if (@mysql_num_rows($my->sql_res)==0)
$data='0';
else
{
for ($data1=array(); $row1=mysql_fetch_assoc($my->sql_res); $data1[]=$row1);
foreach ($data1 as $element1)
{
$data=$element1['datas'];
$picture_name=$element1['gen_name'];
$section=$element1['id_section'];
}
}
//-------------------------------
$my->sql_query="select * from gallery_section where ID='".$section."'";
$my->sql_execute();
if (@mysql_num_rows($my->sql_res)==0)
$data='0';
else
{
for ($data1=array(); $row1=mysql_fetch_assoc($my->sql_res); $data1[]=$row1);
foreach ($data1 as $element1)
{
$section_ok=$element1['Section'];
}
echo '<img src="gallery/work/'.$section_ok.'/small_'.$picture_name.'" border=0>';
}
//--------------------------------------------------------
?>
|
| |
|
|
|
|
|
|
|
для: Diablo_
(21.09.2006 в 01:39)
| | А что он делает? Какова цель кода? | |
|
|
|
|
|
|
|
для: cheops
(21.09.2006 в 12:30)
| | Первая часть кода, берёт из базы билжайшее значение по дате и вытаски вает нужные поля!
Вторая часть, берёт из другова раздела базы значение равное идентефикатору, которое было получено при помощи первой части кода, тем самым вормерует полный путь для рисунка!
Потом вывод рисунка! | |
|
|
|
|
|
|
|
для: Diablo_
(21.09.2006 в 01:39)
| | Можно поступить следующим образом
<?php
$my->sql_query="select * from gallery_picture where (datas<'09.09.2006')";
$my->sql_execute();
if (@mysql_num_rows($my->sql_res)==0) $data='0';
else
{
$picture = mysql_fetch_assoc($my->sql_res);
$my->sql_query="select * from gallery_section where ID= ".$picture['id_section'];
$my->sql_execute();
if (@mysql_num_rows($my->sql_res)==0) $data='0';
else
{
$section = mysql_fetch_assoc($my->sql_res);
echo '<img src="gallery/work/'.$section['Section'].'/small_'.$picture['gen_name'].'" border=0>';
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(21.09.2006 в 13:15)
| | А как получить 3 ближайшие к текущий дате?
По убыванию! | |
|
|
|
|
|
|
|
для: Diablo_
(21.09.2006 в 15:31)
| | Как я понял Вам необходимо получить информацию из двух таблиц о трёх картинках ближайших по дате к заданной? Тогда достаточно в запросе объеденить эти таблицы по ID, что-то вроди:
<?
$my->sql_query="select * from gallery_picture AS p, gallery_section AS s where s.ID=p.id_section AND (p.datas<'09.09.2006') ORDER BY p.datas DESC LIMIT 3";
$my->sql_execute();
if (@mysql_num_rows($my->sql_res)==0) $data='0';
else
{
while($section = mysql_fetch_assoc($my->sql_res))
{
echo '<img src="gallery/work/'.$section['Section'].'/small_'.$section['gen_name'].'" border=0>';
}
}
?>
|
Если я нигде не ошибся с полями БД. Но думаю суть ясна. | |
|
|
|
|
|
|
|
для: Vlas_r
(21.09.2006 в 17:17)
| |
Это работать не будет.
Причем у всех оппонентов.
Даты сравнваются точно также как и строки. | |
|
|
|
|
|
|
|
для: Trianon
(21.09.2006 в 21:00)
| | Подробнее можно? | |
|
|
|
|
|
|
|
для: Diablo_
(22.09.2006 в 00:21)
| | Можно.
Попробуйте выполнить SELECT NOW() from dual WHERE NOW() < '21.09.2006'
Сильно удивитесь
Даты записываются в MySQL в виде ГГГГ.ММ.ДД
И никак иначе. | |
|
|
|
|
|
|
|
для: Trianon
(22.09.2006 в 09:52)
| | Они записываются так, как запишет их юзер!:)
Есть одно но, код работает отлично, картинки выводит, но не получается вывести описание которое хранится в бд в разделе "gallery_picture" в столбце "opisanie", но берёт описание, но только одно, а не для каждой картинки! Я вчера пытался что то сделать, но ничего не получилось! | |
|
|
|
|
|
|
|
для: Diablo_
(22.09.2006 в 11:05)
| | У вас поле datas какой тип имеет календарный или строковый? | |
|
|
|
|
|
|
|
для: cheops
(22.09.2006 в 11:38)
| | календарный "22.09.2006" | |
|
|
|
|
|
|
|
для: Diablo_
(22.09.2006 в 11:44)
| | Календарный тип, это типы TIME, DATE, DATETIME, TIMESTAMP, YEAR, а строковые типы, это TEXT, CHAR, VARCHAR - у вас поле datas какой из этих типов имеет? Просто формат "22.09.2006" будет неправильно сортироваться, так как сравнение дат производитя слева на право, именно поэтому для календарных типов в MySQL используется формат 2006-09-22, т.е. сначала год, потом месяц, потом день. | |
|
|
|
|
|
|
|
для: cheops
(22.09.2006 в 11:53)
| | А..., извините, не понял вопроса!
Формат поля "VARCHAR"! ну елс ибы я знал что нужно не 22.09.2006 писать а 2006.09.22, то сделал бы! Но сейчас уже поздно! | |
|
|
|
|
|
|
|
для: Diablo_
(22.09.2006 в 12:05)
| | Тогда сортировка по дате будет не правильной. | |
|
|
|
|
|
|
|
для: cheops
(22.09.2006 в 12:27)
| | ну можно же просто сравнением текущие даты и той что в бд?
Как правильно записывать дату в бд? Просто вот так "2006.09.22"??? | |
|
|
|
|
|
|
|
для: Diablo_
(22.09.2006 в 13:00)
| | Формально, должно быть 2006-09-22 13:01:51 . Это же будет возвращать MySql
Но принимает он данные, насколько я помню, с любым разделителем, необязательно через минус. | |
|
|
|
|
|
|
|
для: cheops
(22.09.2006 в 12:27)
| | Причем тут сортировка?
Речь идет о сравнении.
Запросы вида
select * from gallery_picture where (datas<'09.09.2006')";
|
будут возвращать совсем не то, что от них ожидают. | |
|
|
|
|
|
|
|
для: Trianon
(22.09.2006 в 13:01)
| | Суть одна и та же... дело не в следствиях, а в причине... хранение даты в формате DD.MM.YYYY в строках будет давать неправильные результаты везде где одна дата сравнивается с другой, будь то сортировка или операторы сравнения. | |
|
|
|
|
|
|
|
для: cheops
(22.09.2006 в 13:15)
| | Дело в формулировках.
Ваши реплики 11:53 и 12:27 (тем паче на фоне реплики Diablo_ 11:05) можно воспринять так, что все скрипты будут работать, только данные могут выводиться в неожиданном порядке.
И уж если на то пошло, сортировка является следствием представления данных. А представление - соответственно - причиной. | |
|
|
|
|
|
|
|
для: Trianon
(22.09.2006 в 13:26)
| | Полностью с вами согласен. | |
|
|
|