Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Неправильно работают SQL-запросы
 
 автор: TetRiska   (27.11.2008 в 19:38)   письмо автору
 
 

Всем привет. Вот код:

$query = mysql_query("SELECT DISTINCT left(date,7) AS month FROM data ORDER BY month DESC",$db);
      
$myrow4 = mysql_fetch_array($query);
$temp_year = array();
$i = 0;

while ($row = mysql_fetch_assoc($query));
{
  list ($year,$month) = explode("-",$myrow4["month"]);
  $temp_year[$i] = $year;
  $i++;
}

$result = array_unique($temp_year);


1.Запрос выбирает из таблицы data поле date обрезая число...
2.Заносим данные в массив
3.Объявляем новый массив
4.Объявляем переменную, кот. будем использовать в качестве индекса
5.Создаем цикл, в кот. будем выводить не повторяющиеся года
6.Функцией list разбиваем полученную дату на год и месяц
7.В созданный массив с индексом записуем год
8.Увеличиваем индекс на 1
9.После цикла отбрасываем повторяющиеся года и заносим в переменную result

В итоге должно вывести 2008 и 2007 Пробую echo $result[$i]; пишет ошибку...Или я не так вывожу данные? Кто подскажет?...Спасибо

Или есть попроще вариант узнать все года с поля date и выбрать уникальные?

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

  Ответить  
 
 автор: devzorg   (27.11.2008 в 20:10)   письмо автору
 
   для: TetRiska   (27.11.2008 в 19:38)
 

Может так ?

<?php
$query 
mysql_query("SELECT DISTINCT YEAR(date) FROM data ORDER BY date DESC",$db);
      
$temp_year = array();

while (list (
$date) = mysql_fetch_row($query)) $temp_year[] = $year;

print_r($temp_year);

?>


подозревается что поле date типа date в mysql

  Ответить  
 
 автор: Trianon   (27.11.2008 в 20:12)   письмо автору
 
   для: devzorg   (27.11.2008 в 20:10)
 

цикл while можно было и упростить

  Ответить  
 
 автор: BinLaden   (27.11.2008 в 20:54)   письмо автору
 
   для: Trianon   (27.11.2008 в 20:12)
 

> цикл while можно было и упростить

Как?!

  Ответить  
 
 автор: devzorg   (27.11.2008 в 20:21)   письмо автору
 
   для: devzorg   (27.11.2008 в 20:10)
 

соорри) опечатался .. заменить
while (list ($date) на while (list ($year)

  Ответить  
 
 автор: Trianon   (27.11.2008 в 21:00)   письмо автору
 
   для: devzorg   (27.11.2008 в 20:21)
 

какой list?
while ($row = mysql_fetch_row($query)) $temp_year[] = $row[0];

  Ответить  
 
 автор: BinLaden   (27.11.2008 в 21:06)   письмо автору
 
   для: Trianon   (27.11.2008 в 21:00)
 

Обычный list, а чо?

  Ответить  
 
 автор: Trianon   (27.11.2008 в 21:29)   письмо автору
 
   для: BinLaden   (27.11.2008 в 21:06)
 

ну не вижу я вящего смысла применять list в вырожденном случае одной переменной.
Разве что - если все остальные выборки SELECT оформлены аналогично - дабы не нарушать выбранный стиль.

  Ответить  
 
 автор: TetRiska   (27.11.2008 в 21:03)   письмо автору
 
   для: devzorg   (27.11.2008 в 20:21)
 

Сделал так:

$query = mysql_query("SELECT DISTINCT YEAR(date) FROM data ORDER BY date DESC",$db);
      
$temp_year = array();

while (list ($date) = mysql_fetch_row($query)) $temp_year[] = $year;

print_r($temp_year); 


Вывело лишь Array ( [0] => 2007 [1] => 2007 )

А сделал так:

$query = mysql_query("SELECT DISTINCT YEAR(date) FROM data ORDER BY date DESC",$db);
      
$temp_year = array();

while (list ($year) = mysql_fetch_row($query)) $temp_year[] = $year;

print_r($temp_year); 


Вывело Array ( [0] => 2008 [1] => 2007 ) Что есть более правильно, т.к. в базе 2008 год есть

А теперь как можно их в цикле вывести?

Тоесть идея была такова чтобы год выводился таблично в цикле...Пример:

echo "<table class='post' cellspacing='0' cellpadding='0'>
        <tr>
            <td>год</td>
        </tr>
        <tr>
            <td>месяца этого года</td>
        </tr>        
      </table>";


Так:

$query = mysql_query("SELECT DISTINCT YEAR(date) FROM data ORDER BY date DESC",$db);
      
$temp_year = array();

while ($row = mysql_fetch_row($query)) $temp_year[] = $row[0];

print_r($temp_year); 


Выводит Array ( [0] => 2008 [1] => 2007 )

  Ответить  
 
 автор: devzorg   (27.11.2008 в 22:53)   письмо автору
 
   для: TetRiska   (27.11.2008 в 21:03)
 


<?php
$query 
mysql_query("SELECT DISTINCT YEAR(date) as `year` FROM data ORDER BY date DESC",$db);
if(
mysql_num_rows($query) > 0)
{
?><table class='post' cellspacing='0' cellpadding='0'><?
while (list($year) = mysql_fetch_row($query))
{
?><tr><td><?=$year?></td></tr><tr><td>месяца этого года</td></tr><?
}
?></table><?
}
?>


так ?

  Ответить  
 
 автор: TetRiska   (27.11.2008 в 23:19)   письмо автору
 
   для: devzorg   (27.11.2008 в 22:53)
 

:) Клева...Да так..Огромное спасибо...Но попробовав в запрос добавить еще месяц :

$query = mysql_query("SELECT DISTINCT YEAR(date) as `year` MONTH(date) as 'month' FROM data ORDER BY date DESC",$db);


и в лист переменную месяца и там где вывод...то не так отобразило как нужно :(

вывело

2008
11
2008
09
2007
04


Надо чтобы имело такой вид:

2008
11 09
2007
04


Подправте пожалуйста ..Спс

  Ответить  
 
 автор: TetRiska   (28.11.2008 в 01:04)   письмо автору
 
   для: TetRiska   (27.11.2008 в 23:19)
 

Ктото подскажет? Оччень нада :(

  Ответить  
 
 автор: BinLaden   (28.11.2008 в 01:24)   письмо автору
 
   для: TetRiska   (28.11.2008 в 01:04)
 

SELECT YEAR(`date`) as `year`, GROUP_CONCAT(DATE_FORMAT(`date`, '%m')
ORDER BY `date` DESC SEPARATOR ' ') AS `month_list` FROM `data`
GROUP BY `year` DESC;


P.S. Ну тут list() можете поюзать. Никто Вам ничего уже не скажет.

  Ответить  
 
 автор: TetRiska   (28.11.2008 в 01:49)   письмо автору
 
   для: BinLaden   (28.11.2008 в 01:24)
 

благодарю :) постараюсь уже сам исправить ошибку Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

  Ответить  
 
 автор: BinLaden   (28.11.2008 в 02:26)   письмо автору
 
   для: TetRiska   (28.11.2008 в 01:49)
 

Это значит ошибка при выполнении запроса. Покажите текст ошибки через mysql_error(). Хотя я её в упор не вижу...

  Ответить  
 
 автор: TetRiska   (28.11.2008 в 02:59)   письмо автору
 
   для: BinLaden   (28.11.2008 в 02:26)
 

Invalid query: You have an error in your SQL syntax near '(DATE_FORMAT(`date`, '%m') ORDER BY `date` DESC SEPARATOR ' ') AS `month_list` F' at line 1

  Ответить  
 
 автор: BinLaden   (28.11.2008 в 03:04)   письмо автору
 
   для: TetRiska   (28.11.2008 в 02:59)
 

<?php
# ...

$r mysql_query("SELECT VERSION();");
echo 
"MySQL version: ",  mysql_result($r0), "<br />\r\n";
?>

Что выдаёт такой код?

  Ответить  
 
 автор: TetRiska   (28.11.2008 в 03:06)   письмо автору
 
   для: BinLaden   (28.11.2008 в 03:04)
 

MySQL version: 3.23.53-max

Версия устарела?

Или я ошибся правя код?

$query = mysql_query("SELECT YEAR(`date`) AS `year`, GROUP_CONCAT(DATE_FORMAT(`date`, '%m') ORDER BY `date` DESC SEPARATOR ' ') AS `month_list` FROM `data` GROUP BY `year` DESC",$db);
if(mysql_num_rows($query) > 0)
{
?><table class='post' cellspacing='0' cellpadding='0'><?
while (list($year,$month_list) = mysql_fetch_row($query))
{
?><tr><td><?=$year?></td></tr><tr><td><?=$month_list?></td></tr><?
}
?></table><?

  Ответить  
 
 автор: BinLaden   (28.11.2008 в 03:07)   письмо автору
 
   для: TetRiska   (28.11.2008 в 03:06)
 

> Версия устарела?

Очень сильно. Надо бы версию до 5.0 обновить хотя бы...

  Ответить  
 
 автор: TetRiska   (28.11.2008 в 03:11)   письмо автору
 
   для: BinLaden   (28.11.2008 в 03:07)
 

Ясн спасиб...обновлю если что напишу результат)

Вот и результат:) Все ок..Вывело:

2008
12 11 11 11 11 11 11 10 10 10 09
2007
11 09


Останется сгруппировать месяца, сделать на них ссылки, чтобы клацнув по месяцу вывелись заметки за этот месяц этого года и вывести остальные месяца (не активными)...Придется посидеть:)

Пасиба за помощь...Мде поставил обновленный Денвер 3 c мускулом 5, то что не работало - работает, а что работало не работает :( Пришлось откатится до мускула MySQL version: 4.1.16-max Так заработало все:)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования