Последнее найбольшее значение?

Статус
Закрыто для дальнейших ответов.

czp

czp
Регистрация
05.06.2011
Сообщения
635
есть таблица, описую кратко так как другие поля не имеют значени
category | position
есть 2 категории, категория 1 и 2 , (int) ну соответственно позиций бесконечно, сколько строк столько и позиций(это не ид)
но в категории 1, свои озиции а в 2 свои тоесть
category | position
1 | 1
1 | 2
1 | 3
1 | 4
1 | 5
2 | 1
2 | 2
2 | 3
2 | 4

как сделать запрос? что бы я мог с каждой категории узнать найбольшое число позиции?тоесть мне нужно вернуть с категории 1 позицию 5 а с 2 поз. 4. что подскажете?
-----
что я хочу сделать сделать:
эти позиции отображают положение материала, и при создании нового без ручного ввода, нужно автоматом подставить след по счету позициию (+1) тоесть если в категории 1 максимальная позиция 5 (5 материалов) то при создании нового должно 6 быть в ячейки позиция
 

Aristotel

Well-Known Member
Регистрация
14.04.2011
Сообщения
213
PHP:
$max1 = mysql_query("SELECT * FROM table WHERE position = (SELECT MAX(position) FROM table) AND category = 1");
$max2 = mysql_query("SELECT * FROM table WHERE position = (SELECT MAX(position) FROM table) AND category = 2");
не уверен но в теории должно работать
 
  • Like
Реакции: czp

czp

czp
Регистрация
05.06.2011
Сообщения
635
работает спасибо :laugh:
(SELECT MAX(position) FROM table)
я такое первый раз вижу, что в запросе можно еше в скобках другой запрос выдать,
порекомендуй толковую литературу по мусклу, если не сложно, а то есть у меня одна
САМОУЧИТЕЛЬ
Максим кузнецов
но блин отсканированя, недоубно читать

Код:
$db->query("INSERT INTO mm_article (id, cat, pos, title, description) VALUES (NULL, 1, (SELECT MAX(pos) FROM mm_article) + 1 ,\"" . $title . "\", \"" . $text . "\")"))
нужна, помошь, как мне в поp. записать, максимальную позицию + 1, понятно что можно сначало вытянуть позициюб и запись, а как сделать методами мускла?такой вариант как я привел не работает, даже если заключить вковычки поз. валуе
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
не уверен но в теории должно работать
Такие советы - медвежья услуга!
Нахрена писать код, не проверив его работоспособность, а тем более, не будучи уверенным, что он сработает правильно.

С приведенной в первом посте таблицей ваш второй запрос вернет "4", то есть - максимальное значение в категории 2, но он вернет не 4 из категории 2, как мы ожидаем (запись №9), а 4 из категории 1 (запись №4). Вроде бы, тоже 4, ан не та!

Вот проверенный пример:
Код:
<?php
$DBSERVER = "localhost";
$DBUSER = "root"; 
$DBPASS = ""; 
$DB = "testbase";

$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS) or die(mysql_error());
mysql_select_db($DB, $link) or die (mysql_error());

$result1 = mysql_query("SELECT * FROM table1 WHERE position = (SELECT MAX(position) FROM table1 WHERE category = 1) AND category = 1") 
or die(mysql_error());
$result2 = mysql_query("SELECT * FROM table1 WHERE position = (SELECT MAX(position) FROM table1 WHERE category = 2) AND category = 2") 
or die(mysql_error());

$row1 = mysql_fetch_array($result1);
$row2 = mysql_fetch_array($result2);

echo 'MAX position on category #1 is '.$row1['position'].' (id='.$row1['id'].')<br>';
echo 'MAX position on category #2 is '.$row2['position'].' (id='.$row2['id'].')';
?>
И результат его работы для таблицы из поста#1:
MAX position on category #1 is 5 (id=5)
MAX position on category #2 is 4 (id=9)
 
  • Like
Реакции: czp

czp

czp
Регистрация
05.06.2011
Сообщения
635
спасибо обоим)
сделал так, работает вроде
Код:
"INSERT INTO mm_article (id, cat, pos, title, description) VALUES (NULL, 1, (SELECT MAX(b.pos) FROM mm_article AS b) + 1 , \"" . $title . "\", \"" . $text . "\")"
тему, можно закрыть :dry:
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
Небольшой "трюк" (даёт +1 к опыту :)).

как получить максимальные позиции из всех категорий одним запросом:
Код:
SELECT cat, MAX( pos ) FROM  `table` GROUP BY cat
 

czp

czp
Регистрация
05.06.2011
Сообщения
635
дично мне + 2 к опыту :blush:
 
Статус
Закрыто для дальнейших ответов.
Верх Низ