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

Форум MySQL

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

 

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

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

тема: Минимальное/максимальное значение
 
 автор: Vova   (19.01.2006 в 12:59)   письмо автору
 
 

Как правильно составить запрос для того чтобы выводилось минимальное значение столбца.
Ну и соответственно, максимальное значение для другого запроса.

   
 
 автор: Loki   (19.01.2006 в 13:42)   письмо автору
 
   для: Vova   (19.01.2006 в 12:59)
 


SELECT MIN(pole) FROM table


SELECT MAX(pole) FROM table

   
 
 автор: cheops   (19.01.2006 в 13:46)   письмо автору
 
   для: Vova   (19.01.2006 в 12:59)
 

Это зависит от данных, которые помещены в таблицу и того, какие данные необходимо извлечь. Обычно прибегают к двум запросам, сначала извлекают максимальное значение
SELECT MIN(val) FROM tbl

Затем полученное значение используют во втором запросе в WHERE-условии
SELECT * FROM tbl WHERE val = $val

Если у вас MySQL 4.1 и выше, вы можете прибегнуть к вложенным запросам
SELECT * FROM tbl WHERE val = (SELECT MIN(val) FROM tbl)

   
 
 автор: Vova   (19.01.2006 в 14:12)   письмо автору
 
   для: cheops   (19.01.2006 в 13:46)
 

Значения у меня цифры, а MySQL - 4.0.26.

   
 
 автор: Vova   (19.01.2006 в 14:57)   письмо автору
 
   для: Vova   (19.01.2006 в 14:12)
 

В этом запросе SELECT MIN(pole) FROM table pole - это название столбца из которого мне нужно извлечь минимальное значение?
Т.е. мне нужно вывести не само это мин значение, а всю строчку, в одном из столбцов которой содержиться минимальное число.
Например, такая таблица
a b c d
q 9 e r
z 3 c v
a 7 s f
И мне нужно вывести строчку "z 3 c v" , содержащее минимальное значение (3) в столбце b.

Пробовал SELECT MIN(pole) FROM table , где под pole подставлял имя столбца, но выводит пустую чистую строку ...

   
 
 автор: cheops   (19.01.2006 в 18:03)   письмо автору
 
   для: Vova   (19.01.2006 в 14:57)
 

>Пробовал SELECT MIN(pole) FROM table
А где пробовали и как обращались к результату?

   
 
 автор: Vova   (19.01.2006 в 18:40)   письмо автору
 
   для: cheops   (19.01.2006 в 18:03)
 

Ну вот, у меня вот такой код, который выводит целиком всю таблицу.
Пробовал здесь вставлять $query = "SELECT MAX(min) FROM catalog_ssh"; не получается.


$query = "SELECT * FROM catalog_ssh WHERE id_parent=".$_GET['id_parent']." 
              ORDER BY pos";
        
    $ctg = mysql_query($query);
    if(!$ctg) puterror("Ошибка");
   
      echo "<tr class='tableheadercat'>
              <td align=center><p class=help>A</td>
              <td align=center><p class=help>B</td>
              <td align=center><p class=help>C</td>
              <td align=center><p class=help>D</td>
              <td align=center><p class=help>E, xls</td>
                <td align=center><p class=help>F</td>
            </tr>";

    while($cat = mysql_fetch_array($ctg))
    {
    
      if($cat['hide'] == 'hide')
      {
        $strhide = "<a href=showcat.php?id_catalog=".$cat['id_catalog']."&id_parent=".$_GET['id_parent'].">E</a>";
      } 
      else
      {
        $strhide = "<a href=hidecat.php?id_catalog=".$cat['id_catalog']."&id_parent=".$_GET['id_parent'].">H</a>";
      }
    
      echo "<tr>
              
              <td align=center><p>&nbsp;".$cat['description']."</td>
                  <td align=center><p><b>&nbsp;$".$cat['min']."</b></td>
               <td align=center><p>&nbsp;".$cat['name']."</td>
                <td align=center><p>&nbsp;".$cat['deystvuet']."</td>
                   <td align=center><p>&nbsp;<a href=".$cat['down'].">".$cat['name']."</td>
                                  <td><p>&nbsp;".$cat['prim']."</td>
              
              </tr>";
    }
  }
  echo "</table>";
?>


Как можно в этом коде или на основе этого кода организовать вывод строчки, с минимальным значением в столбце "С"?

   
 
 автор: cheops   (20.01.2006 в 00:48)   письмо автору
 
   для: Vova   (19.01.2006 в 18:40)
 

Дело в том, что запрос
<?php
  $query 
"SELECT MAX(min) FROM catalog_ssh"не получается.
?>

возвращает одну строку и обрабатывать её следует примерно так
<?php
  $max 
mysql_query($query);
  if(!
$max) exit(mysql_error());
  echo 
mysql_result($max0);
?>

   
 
 автор: Vova   (23.01.2006 в 11:36)   письмо автору
 
   для: cheops   (20.01.2006 в 00:48)
 

Вот такой код сделал, всё работает, выводя минимальное значение:

<?
    $query 
"SELECT MIN(min) FROM catalog";
        
    
$ctg mysql_query($query);
    if(!
$ctgputerror("Ошибка");
  
?>
 
<?php
  $max 
mysql_query($query);
  if(!
$max) exit(mysql_error());
  echo 
"  ";
  echo 
"*Текст - ";
  echo 
        
mysql_result($max0);
?>

А каким образом сделать, чтобы выводилась вся строка, в которой находиться это минимальное значение? Допустим, если у меня таблица

a b c
q 7 r
w 2 t
e 3 y

Допустим мы вычислили минимальное значение - "2", а как вывести всю строку - "w 2 t" ?

   
 
 автор: Loki   (23.01.2006 в 12:06)   письмо автору
 
   для: Vova   (23.01.2006 в 11:36)
 

Смотри третий пост

   
 
 автор: cheops   (23.01.2006 в 13:39)   письмо автору
 
   для: Vova   (23.01.2006 в 11:36)
 

Так как у вас MySQL версии 4.0.26. минимальное значение следует поместить в переменную $val и подставить во второй запрос
<?php
  $val 
mysql_result($max0);
  
$query "SELECT * FROM catalog WHERE val = $val";
  
$ctg mysql_query($query); 
  if(!
$ctgputerror("Ошибка");

  
$result mysql_fetch_array($ctg);
  echo 
$result['val'];
?>

   
 
 автор: Vova   (30.01.2006 в 13:45)   письмо автору
 
   для: cheops   (23.01.2006 в 13:39)
 

Поместил в код

<?php
    $query 
"SELECT MIN(min) FROM catalog";
        
    
$ctg mysql_query($query);
    if(!
$ctgputerror("Ошибка");
  
?>
 
<?php
  $min 
mysql_query($query);
  if(!
$min) exit(mysql_error());
  echo 
"  ";
  echo 
"Текст - ";
  echo 
" ";
  echo 
        
mysql_result($min0);
?>
<?php
  $val 
mysql_result($min0);
  
$query "SELECT * FROM catalog val = $val";
  
$ctg mysql_query($query);
  if(!
$ctgputerror("Ошибка");

  
$result mysql_fetch_array($ctg);
  echo 
$result['val'];
?> 


Первым запросом правильно выводит минимальное значение, но второй запрос на срабатывает: выдает "Ошибка".

   
 
 автор: cheops   (30.01.2006 в 14:39)   письмо автору
 
   для: Vova   (30.01.2006 в 13:45)
 

Исправьте строку после второго запроса с
 if(!$ctg) puterror("Ошибка");

на
 if(!$ctg) puterror("Ошибка".mysql_error());

что пишет?

   
 
 автор: Vova   (30.01.2006 в 15:14)   письмо автору
 
   для: cheops   (30.01.2006 в 14:39)
 

Ошибка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 '= 173' at line 1
173 - это вычисленное минимальное значение.

   
 
 автор: cheops   (30.01.2006 в 22:19)   письмо автору
 
   для: Vova   (30.01.2006 в 15:14)
 

А столбец val точно существует? Ведь в первом запросе у вас используется столбец с именем min.

   
 
 автор: Loki   (30.01.2006 в 22:50)   письмо автору
 
   для: cheops   (30.01.2006 в 22:19)
 

я конечно дико извиняюсь, но не является ли min зарезерверованным словом? А если таки является, то не надо ли его брать в обратные кавычки?
А ошибка вот тут:

$query = "SELECT * FROM catalog val = $val";

а надо

$query = "SELECT * FROM catalog WHERE val = $val";

   
 
 автор: cheops   (31.01.2006 в 03:14)   письмо автору
 
   для: Loki   (30.01.2006 в 22:50)
 

Хм... дейстивительно, слона-то я не заметил :)))

   
 
 автор: Vova   (31.01.2006 в 16:46)   письмо автору
 
   для: cheops   (31.01.2006 в 03:14)
 

Вот такой код


<?php
    $query 
"SELECT MIN(min) FROM catalog";
        
    
$ctg mysql_query($query);
    if(!
$ctgputerror("Ошибка");
  
?>

<?php
  $min 
mysql_query($query);
  if(!
$min) exit(mysql_error());
  echo 
"  ";
  echo 
"Текст - ";
  echo 
" ";
  echo
        
mysql_result($min0);
?> 
<?php
  $val 
mysql_result($min0);
  
$query "SELECT * FROM catalog_spo_hrg where min = $val";
  
$ctg mysql_query($query);
   if(!
$ctgputerror("Ошибка".mysql_error());

  
$result mysql_fetch_array($ctg);
  echo 
$result['min'];
?> 

Столбца val, да нет. Есть столбец min.
Правильно в коде указано?

А всё равно строки нет, указывает только минимальное это значение. Здесь echo $result['min'];

   
 
 автор: cheops   (31.01.2006 в 22:06)   письмо автору
 
   для: Vova   (31.01.2006 в 16:46)
 

А ошибку сейчас какую-нибудь выводит?

   
 
 автор: Vova   (01.02.2006 в 11:07)   письмо автору
 
   для: cheops   (31.01.2006 в 22:06)
 

Не, ошибку не выводит, выводит это минимальное значение, которое находится в столбце min. А хотелось бы всю строку или хотя бы значение из другого столбца (допустим с именем столбца - name) рядом с этим минимальным значением.

   
 
 автор: cheops   (01.02.2006 в 13:49)   письмо автору
 
   для: Vova   (01.02.2006 в 11:07)
 

Хм... так вы выводите значение другого столбца
<?php
  $result 
mysql_fetch_array($ctg); 
  echo 
$result['min']."<br>";
  echo 
$result['val']."<br>";
  echo 
$result['val_other']."<br>";
?>

Где val и val_other - имена других столбцов.

   
Rambler's Top100
вверх

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