Сортировка строк по дарте

Статус
В этой теме нельзя размещать новые ответы.

Holon

Новичок
Сортировка строк по дарте

Так как "PHP" для меня язык новый я разбиваю задачу на части и решаю ее поэтапно,
мне надо окрасить строки таблицы по дате, для этого мне надо сравнивать дату из
таблицы "MySQL" и "date()", для начала я хочу разобратся с работой функции
"date()", написал небольшей скрипт который должен сравнивать даты и выдавать следуюсщий результат: печатать результат полученый из таблицы находящейся в "MySQL" и сообщать "Дата больше" "Дата меньше", но скрипт работает некоректно,
к примеру на сервере в таблице есть дата:
mysql> SELECT DISTINCT DATE_EX from info WHERE NPP = 1;
+------------+
| DATE_EX |
+------------+
| 2009-10-07 |
+------------+
1 row in set (0.00 sec)
запускаю скрипт
http://localhost/date_server.php
результат:
Resource id #3Data from table bigger
теперь меняю дату на сервер, проверяю
mysql> SELECT DISTINCT DATE_EX from info WHERE NPP = 1;
+------------+
| DATE_EX |
+------------+
| 2007-10-07 |
+------------+
1 row in set (0.00 sec)
запускаю скрипт
http://localhost/date_server.php
результат:
Resource id #3Data from table bigger

В первом и втором случае вместо "Даты" печатает "Resource id #3"
и в добавок выдает один и тот-же резултат при разных датах.
Вот код скрипта:
PHP:
<?php
//http://localhost/date_server.php
$host = "localhost";
$user = "vldsa";
$password = "12345";
$db =  "client";
if (!mysql_connect($host, $user, $password))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
mysql_select_db($db);
$data = mysql_query ("SELECT DISTINCT DATE_EX FROM INFO WHERE NPP = 1");
printf ($data);
if (date("Y-m-d")>($data))
{
echo "Data from table bigger";
}
else
{
echo "Data from table smaller";
}
mysql_close();
?>
В чем может быть проблема?
 

Holon

Новичок
Да вот так вот заработало, только я почему-то непонял, для чего здесь
в концр ноль ставится
PHP:
 mysql_result ($data,0);
,
вот так все выглядит вместе:
PHP:
<?php
//http://localhost/date_server.php
$host = "localhost";
$user = "vldsa";
$password = "12345";
$db =  "client";
if (!mysql_connect($host, $user, $password))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
mysql_select_db($db);
$data = mysql_query ("SELECT DISTINCT DATE_EX FROM INFO WHERE NPP = 1");
echo mysql_result ($data,0);

if (date("Y-m-d")<($data))
{
echo "Data from table bigger";
}
else
{
echo "Data from table smaller";
}
mysql_close();
?>
 

Фанат

oncle terrible
Команда форума
очень. очень смешно.

-~{}~ 23.10.07 17:51:

безотносительно к отому, что написано в документации про функцию mysql_result - не мог бы ты пояснить, какое воздействие её появление оказывает на выполнение остального кода?
 

Holon

Новичок
Раскажи, что именно, вместе посмеемся.

-~{}~ 23.10.07 17:59:

Я так понял из описания, что функция mysql_query не возвращает результат, а только "указатель" на резулитат, а функция mysql_result возвращает результат из "указателя", код работает, вот результат:
2007-10-07Data from table smaller
 

Фанат

oncle terrible
Команда форума
код, который ты привел здесь, ничем в результатах своей работы не отличается от предыдущего.
 

Фанат

oncle terrible
Команда форума
ошибка в том, что ты пишешь на форуме один код, а запускаешь у себя - другой.
больше НИКОГДА так не делай.

и попробуй научиться выполнять фильтрацию (а никакую не сортировку) средставми базы данных
 

Holon

Новичок
Ну слегка прижмурясь напишу следующее, после просмотра "Manual MySQL" в раздел
"Date Time" я ненашел функцию которая сравнивает даты вот пример:

mysql> SELECT DATEDIFF('2007-10-12','2007-10-24');
+-------------------------------------+
| DATEDIFF('2007-10-12','2007-10-24') |
+-------------------------------------+
| -12 |
+-------------------------------------+
1 row in set (0.00 sec)

и функцию SELECT NOW(); которая возвращает реальную дату, выглядит вот так:

mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2007-10-24 07:25:43 |
+---------------------+
1 row in set (0.03 sec)

Есть моя таблица выглядит так:
mysql> SELECT * FROM INFO;
+-----+------------+-----------+--------+--------+---------+------------+
| NPP | DATE | CUSTOMER | MAN_NO | ORD_NO | CUST_NO | DATE_EX |
+-----+------------+-----------+--------+--------+---------+------------+
| 1 | 2007-10-18 | cust_name | 9000 | 20300 | 128127 | 2009-10-07 |
| 2 | 2007-10-06 | New_Name | 9001 | 20301 | 128128 | 2007-10-21 |
| 3 | 2007-10-06 | OGOGO | 9001 | 20301 | 128128 | 2007-10-19 |
+-----+------------+-----------+--------+--------+---------+------------+
3 rows in set (0.02 sec)
теперь все это надо как-то связать, попытка вставить запрос в запрос,
закончилось неудачей
mysql> SELECT DATEDIFF(SELECT NOW(),'2007-10-13');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'SELEC
T NOW(),'2007-10-13')' at line 1

Что будем читать дальше?
 

akd

dive now, work later
Команда форума
не дальше а снова.
снова мануал мускула на тему:
http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
 

Holon

Новичок
Вот так вот правильное направление?

mysql> SELECT CURDATE, CUSTOMER, MAN_NO,ORD_NO,CUST_NO,DATE_EX,
-> (DATE_EX)- (CURRENT_DATE)
-> - (RIGHT(CURRENT_DATE,5)<RIGHT(DATE_EX,5))
-> AS result
-> FROM INFO;
+------------+-----------+--------+--------+---------+------------+--------+
| CURDATE | CUSTOMER | MAN_NO | ORD_NO | CUST_NO | DATE_EX | result |
+------------+-----------+--------+--------+---------+------------+--------+
| 2007-10-24 | cust_name | 9000 | 20300 | 128127 | 2009-10-07 | 19983 |
| 2007-10-24 | New_Name | 9001 | 20301 | 128128 | 2007-10-21 | -3 |
| 2007-10-24 | OGOGO | 9001 | 20301 | 128128 | 2007-10-19 | -5 |
+------------+-----------+--------+--------+---------+------------+--------+
3 rows in set (0.00 sec)
 

Ermitazh

Новичок
SELECT DATEDIFF('2007-10-12','2007-10-24')
в мануале написано правильно, а у тебя нет.

-~{}~ 24.10.07 12:36:

закончилось неудачей
mysql> SELECT DATEDIFF(SELECT NOW(),'2007-10-13');
-~{}~ 24.10.07 12:37:

Holon
DATEDIFF это функция, поэтому иди и посмотри как работать с функциями, принцип у всех одинаковый
 

Holon

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

mysql> SELECT CURDATE, CUSTOMER, MAN_NO,ORD_NO,CUST_NO,DATE_EX,
-> (DATE_EX)- (CURRENT_DATE)
-> - (RIGHT(CURRENT_DATE,5)<RIGHT(DATE_EX,5))
-> AS result
-> FROM INFO;
+------------+-----------+--------+--------+---------+------------+--------+
| CURDATE | CUSTOMER | MAN_NO | ORD_NO | CUST_NO | DATE_EX | result |
+------------+-----------+--------+--------+---------+------------+--------+
| 2007-10-24 | cust_name | 9000 | 20300 | 128127 | 2009-10-07 | 19983 |
| 2007-10-24 | New_Name | 9001 | 20301 | 128128 | 2007-10-21 | -3 |
| 2007-10-24 | OGOGO | 9001 | 20301 | 128128 | 2007-10-19 | -5 |
+------------+-----------+--------+--------+---------+------------+--------+
3 rows in set (0.00 sec)
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Holon
обясните, пожалуйста, с чего Вы взяли, что за раскраску цвета каждой строки должна отвечать именно БД и структура таблицы?
 

Holon

Новичок
Задача простая я хочу построить скрипт который бы выводил таблицу с данными из
таблицы находящейся на сервере MySQL, строки таблиц в броузере должны отображатся тремя цветами, если дата в "DATE_EX" равна "CURDATE" строка таблицы будет розового цвета, если дата в "DATE_EX" меньше "CURDATE" строка таблицы
зеленого, и наконец если дата в "DATE_EX" больше "CURDATE" строка таблицы красного цвета. Так вот рассматривая пути решения этой задачи был выбран путь
решения всех логических задач на сервер запросами "SQL" так рекомендуется делать
в ссылках которые были любовно предоставлены выше, теперь в скрипте мне осталось сравнивать результат полученный в колонке "result" 0=$result 0>$result 0<$result,
соответственно "розовый" "зеленый" "красный".
 

Фанат

oncle terrible
Команда форума
Mr_Max
потому что это я протормозил. и велел ему делать базой
за что у автора топика прошу прощения

раскрашивать удобнее, конечно, в скрипте.
но освоение работы с базой данных, надеюсь, не было совсем бесполезным.
 

Holon

Новичок
Интуитивно я представляю код вот так:
PHP:
<?php
//                   [url]http://localhost/date_server.php[/url]
$host = "localhost";
$user = "vldsa";
$password = "12345";
$db =  "client";
if (!mysql_connect($host, $user, $password))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
mysql_select_db($db);
echo "<table border=\"1\" width=\"100%\"  lang=\"he\">";
echo "<tr><td>CUSTOMER</td><td>MAN_NO</td><td>DATE_EX</td></tr>";
$q = mysql_query
("SELECT
CUSTOMER, MAN_NO, DATE_EX, (DATE_EX)- (CURRENT_DATE)
- (RIGHT(CURRENT_DATE,5)<RIGHT(DATE_EX,5))
AS result
FROM INFO");
for ($c=0; $c<mysql_num_rows($q); $c++)
{
$f = mysql_fetch_array($q);
if($f[result]==0) $color= " pink ";
if($f[result]>0) $color= " #458B74 ";
if($f[result]>0) $color= " #FF4040 ";

echo "<tr lang=\"he\" bgcolor=\"$color\"><td>$f[CUSTOMER]</td>";
echo "<td>$f[MAN_NO]</td><td>$f[DATE_EX]</td></tr>";
}
echo "</table>";
mysql_close();
?>
Ну из-за того, что синтaксис мне незнаком, есть ошибки в представлении,
и сравнении типов данных, в следующих строках:
PHP:
if($f[result]==0) $color= " pink ";
if($f[result]>0) $color= " #458B74 ";
if($f[result]>0) $color= " #FF4040 ";
Если возможно поправьте меня, просьба недавать ссылки на операторы "PHP"
я сейчас там нахожусь.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху