<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Хабрахабр / Комментарии к посту «Автоматическая сортировка строк с вспомогательным порядковым столбцом — средствами MySQL» в блоге «MySQL»</title>
	<link>http://habrahabr.ru/rss/post/81394/</link>
	<description><![CDATA[Новые комментарии к посту «Автоматическая сортировка строк с вспомогательным порядковым столбцом — средствами MySQL» в блоге «MySQL»]]></description>
	<language>ru</language>
	<managingEditor>editor@habrahabr.ru</managingEditor>
	<generator>habrahabr.ru</generator>
	<pubDate>Sat, 11 Feb 2012 14:05:44 GMT</pubDate>
	<lastBuildDate></lastBuildDate>
	<image>
		<link>http://habrahabr.ru/</link>
		<url>http://habrahabr.ru/i/logo.gif</url>
		<title>Хабрахабр</title>
	</image>
	

	
	
	
	
	
		
	
		<item>
			<title>03.02.2010 21:47:22 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2470325</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2470325</link>
			<description><![CDATA[В принципе да, можно. Единственное что мне в этом не нравится — теоретически неограниченный рост столбца order_num :)]]></description>
			<pubDate>Wed, 03 Feb 2010 21:47:22 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>03.02.2010 10:18:25 Methos</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2466938</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2466938</link>
			<description><![CDATA[Но ведь можно поддерживать уникальный order_num при вставке новой записи. То есть, при вставке берётся максимальный и увеличивается на единицу.]]></description>
			<pubDate>Wed, 03 Feb 2010 10:18:25 GMT</pubDate>
			<author>Methos</author>
		</item>
	

	
		<item>
			<title>22.01.2010 13:06:18 kurokikaze</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2416116</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2416116</link>
			<description><![CDATA[Надо делать self-join. Сейчас попробую написать.]]></description>
			<pubDate>Fri, 22 Jan 2010 13:06:18 GMT</pubDate>
			<author>kurokikaze</author>
		</item>
	

	
		<item>
			<title>22.01.2010 11:20:48 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415570</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415570</link>
			<description><![CDATA[Вы правы, изменил для наглядности. Спасибо! :)]]></description>
			<pubDate>Fri, 22 Jan 2010 11:20:48 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>22.01.2010 11:14:11 widowmaker</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415542</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415542</link>
			<description><![CDATA[P.S.S. а еще надо взять за привычку перечитывать свой комментарий перед отправлением :(]]></description>
			<pubDate>Fri, 22 Jan 2010 11:14:11 GMT</pubDate>
			<author>widowmaker</author>
		</item>
	

	
		<item>
			<title>22.01.2010 11:12:28 widowmaker</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415536</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415536</link>
			<description><![CDATA[Да, уже вник в смысл танцев с бубном. Чтобы было понятнее данные надо немного изменить, тогда станет понятнее, например, вместо 40 поставить 70.<br/>
<br/>
P.S. Надо будет в следующий раз внимательнее читать.]]></description>
			<pubDate>Fri, 22 Jan 2010 11:12:28 GMT</pubDate>
			<author>widowmaker</author>
		</item>
	

	
		<item>
			<title>22.01.2010 10:53:57 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415468</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415468</link>
			<description><![CDATA[Именно :)]]></description>
			<pubDate>Fri, 22 Jan 2010 10:53:57 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>22.01.2010 10:48:21 LoneCat</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415446</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415446</link>
			<description><![CDATA[Ограничение из-за того что поле сортировки должно быть уникально по всей таблице, а пересортировка может производится отдельно по категориям?]]></description>
			<pubDate>Fri, 22 Jan 2010 10:48:21 GMT</pubDate>
			<author>LoneCat</author>
		</item>
	

	
		<item>
			<title>22.01.2010 10:43:45 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415433</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415433</link>
			<description><![CDATA[Видимо вы невнимательно читали топик. «Замечу, что… нельзя использовать порядковые 0,1,2,… — для использования годится только id товара.». Глупый движой поставил мне жёсткие рамки :)]]></description>
			<pubDate>Fri, 22 Jan 2010 10:43:45 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>22.01.2010 10:41:23 LoneCat</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415426</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415426</link>
			<description><![CDATA[Ну видимо автор забыл что UPDATE тоже имеет сортировку, соот-но и пытался задачу сортировки переложить на SELECT, что добавило своих ограничений. Я, читая условия задачи, тоже об этом не вспомнил, все-таки не так часто это используется, или в случае когда есть внутренний счетчик, или когда обновление/удаление ограниченно через LIMIT.]]></description>
			<pubDate>Fri, 22 Jan 2010 10:41:23 GMT</pubDate>
			<author>LoneCat</author>
		</item>
	

	
		<item>
			<title>22.01.2010 10:29:34 widowmaker</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415386</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415386</link>
			<description><![CDATA[Для надёжности лучше даже<br/>
<blockquote><code><font color="black"><font color="#0000ff">SET</font> @<font color="#0000ff">order</font> := 0;<br/>
<font color="#0000ff">UPDATE</font> `products` <font color="#0000ff">SET</font> `order_num` = @<font color="#0000ff">order</font> := (@<font color="#0000ff">order</font> + 10) <font color="#0000ff">ORDER</font> <font color="#0000ff">BY</font> `model` <font color="#0000ff">ASC</font>;</font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font></code></blockquote>]]></description>
			<pubDate>Fri, 22 Jan 2010 10:29:34 GMT</pubDate>
			<author>widowmaker</author>
		</item>
	

	
		<item>
			<title>22.01.2010 10:21:49 widowmaker</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2415350</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2415350</link>
			<description><![CDATA[А зачем вообще мучаться???<br/>
Можно вполне даже без подзапросов обойтись:<br/>
<blockquote><code><font color="black"><font color="#0000ff">SET</font> @<font color="#0000ff">order</font> := 0;<br/>
<font color="#0000ff">UPDATE</font> `products` <font color="#0000ff">SET</font> `order_num` = @<font color="#0000ff">order</font> := @<font color="#0000ff">order</font> + 10 <font color="#0000ff">ORDER</font> <font color="#0000ff">BY</font> `model` <font color="#0000ff">ASC</font>;</font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font></code></blockquote>]]></description>
			<pubDate>Fri, 22 Jan 2010 10:21:49 GMT</pubDate>
			<author>widowmaker</author>
		</item>
	

	
		<item>
			<title>21.01.2010 21:25:59 phpdude</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2413861</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2413861</link>
			<description><![CDATA[ну у меня он разок выбрал tinyint вместо int и соответственно результаты были шокирующие, когда заметили эту «мелочь» :))]]></description>
			<pubDate>Thu, 21 Jan 2010 21:25:59 GMT</pubDate>
			<author>phpdude</author>
		</item>
	

	
		<item>
			<title>21.01.2010 21:18:29 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2413824</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2413824</link>
			<description><![CDATA[В данном случае всё просто, мускл вполне верно выбрал тип обоих полей INT. Спасибо, буду знать что не всё так сахарно :)]]></description>
			<pubDate>Thu, 21 Jan 2010 21:18:29 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>21.01.2010 19:33:19 phpdude</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2413424</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2413424</link>
			<description><![CDATA[ничего не лишний. посмотрите на структуры таблич откуда выбираете и что у вас получилось после create table… <br/>
<br/>
посмотреть можно через show create table `by_model` и вы можете быть приятно удивлены! длины столбцов не совпадают, типы (даже для int) тоже не совпадают, потому что мускуль выбрал САМ, а выбрал — что ему по душе было. надо ручками описывать если дальше ст абличкой хочется без проблем работать, может конечно мне мускули всегда говенные попадаются и я знаю о таких подводных камнях :)<br/>
<br/>
зы: переменная и правда сессионная, я имел ввиду глобальная — по отношению к запросу. то есть это не манипуляция со столбцами таблиц в запросе.]]></description>
			<pubDate>Thu, 21 Jan 2010 19:33:19 GMT</pubDate>
			<author>phpdude</author>
		</item>
	

	
		<item>
			<title>21.01.2010 19:22:11 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2413384</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2413384</link>
			<description><![CDATA[Я пробовал вариант «CREATE TEMPORARY TABLE `by_model` (… AUTO_INCREMENT… ) SELECT ...» но по какой-то причине отмёл его. Вспомню причину — поделюсь :) Вы правы, в общем случае этого будет достаточно, но есть и минус: придётся описать все поля временной таблицы вручную. Лишний труд имхо]]></description>
			<pubDate>Thu, 21 Jan 2010 19:22:11 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>21.01.2010 19:08:17 pwlnw</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2413325</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2413325</link>
			<description><![CDATA[Чтобы быть до конца уверенным, напишите же как именно следовало тут поступить без применения переменных. Кстати они не глобальные, а сессионные.]]></description>
			<pubDate>Thu, 21 Jan 2010 19:08:17 GMT</pubDate>
			<author>pwlnw</author>
		</item>
	

	
		<item>
			<title>21.01.2010 14:54:50 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2412239</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2412239</link>
			<description><![CDATA[Не, не будут :) парочка дополнительных WHERE выберет только id товаров из нужной категории, и всё будет пучком :)<br/>
Конкретно — в оба подзапроса ставится «WHERE `category_id`=69». Этот момент я опустил чтоб не загромождать суть частностями]]></description>
			<pubDate>Thu, 21 Jan 2010 14:54:50 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>21.01.2010 11:12:02 phpdude</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2411144</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2411144</link>
			<description><![CDATA[все было бы круто, если бы не <br/>
<br/>
SET @n_row := 0; # Начальное значение счётчика строк<br/>
CREATE TEMPORARY TABLE `by_model`<br/>
 SELECT @n_row:=@n_row+1 AS `rowid`, `product_id`<br/>
 FROM `products`<br/>
 ORDER BY `model` ASC;<br/>
<br/>
для этого существует autoincrement, а не «глобальные переменные». ибо переменная тут — костыль. я уверен что эту задачу можно решить в 1 несложный запрос, если бы мне попалась такая задача, то я бы конечно попытался и уверен что нашел бы вариант :)<br/>
<br/>
а вот оптимизации всяческие — уже интересная тема, тем более что остро стоящая]]></description>
			<pubDate>Thu, 21 Jan 2010 11:12:02 GMT</pubDate>
			<author>phpdude</author>
		</item>
	

	
		<item>
			<title>21.01.2010 11:03:49 pwlnw</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2411101</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2411101</link>
			<description><![CDATA[Ну не постить же теперь тут главы из всем известных книжек? <br/>
У автора возникла проблема и он ее оригинально решил. И комментарии к этой конкретной зарисовке довольно любопытны.]]></description>
			<pubDate>Thu, 21 Jan 2010 11:03:49 GMT</pubDate>
			<author>pwlnw</author>
		</item>
	

	
		<item>
			<title>21.01.2010 10:50:39 life4beer</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2411012</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2411012</link>
			<description><![CDATA[А можно пояснить, почему из «в частном случае проводилась сортировка товаров одной категории» следует, что «нельзя использовать порядковые 0,1,2,… — для использования годится только id товара.»<br/>
Все равно ведь айдишки продуктов попадают в колонку order_num случайным в общем то образом и ситуации, когда айди продукта из одной категории попадает в ордер_нум продукта из другой категории, будут! Значит колонку order_num для определения категории использовать нельзя и… и 0,1,2 получается тогда ничем не хуже?<br/>
]]></description>
			<pubDate>Thu, 21 Jan 2010 10:50:39 GMT</pubDate>
			<author>life4beer</author>
		</item>
	

	
		<item>
			<title>21.01.2010 08:48:19 phpdude</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2410417</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2410417</link>
			<description><![CDATA[спасибо что ткото за меня беспокоится, но и правда эта задача ничем не отличается от повседневных, есть куда более интересные вопросы в sql — например оптимизация запросов и структуры базы(когда это возможно ..) ради увеличения выборок и снижения нагрузки]]></description>
			<pubDate>Thu, 21 Jan 2010 08:48:19 GMT</pubDate>
			<author>phpdude</author>
		</item>
	

	
		<item>
			<title>21.01.2010 05:38:36 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409873</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409873</link>
			<description><![CDATA[Приятно, что у вас такие запросы пишутся с полпинка. А я-то дурак рассказываю про приёмы которые нагуглить непросто… ;)]]></description>
			<pubDate>Thu, 21 Jan 2010 05:38:36 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>21.01.2010 03:14:02 phpdude</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409779</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409779</link>
			<description><![CDATA[слишком много воды ради 1 запроса…]]></description>
			<pubDate>Thu, 21 Jan 2010 03:14:02 GMT</pubDate>
			<author>phpdude</author>
		</item>
	

	
		<item>
			<title>20.01.2010 22:24:45 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409476</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409476</link>
			<description><![CDATA[Любопытно, у меня на 5.1.37 выдаётся ошибка «Can't reopen table: 'p'». Могли ошибиться с адаптацией примера, но это неважно: идея понятна, спасибо :) Правда, сработает она только если допустимо присвоение своих чисел в столбец сортировки, а я писал что этого делать нельзя: сортируются только товары в одной категории. Если таким запросом сортировать несколько категорий раздельно — получатся повторы в столбце сортировки.]]></description>
			<pubDate>Wed, 20 Jan 2010 22:24:45 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>20.01.2010 22:15:12 JayDi</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409455</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409455</link>
			<description><![CDATA[Там же в комментариях к документации пишут, что такое ограничение обходится путем вынесения подзапроса на 2 уровня вглубь — в этом случае данные полностью материализуются и могут использоваться в обновлении. У нас именно такой запрос и получился — работает на 5.0 сервере.]]></description>
			<pubDate>Wed, 20 Jan 2010 22:15:12 GMT</pubDate>
			<author>JayDi</author>
		</item>
	

	
		<item>
			<title>20.01.2010 21:56:04 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409402</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409402</link>
			<description><![CDATA[Наверное вы правы. Однако документация последней MySQL гласит, что нельзя одновременно делать UPDATE таблицы, из которой происходит чтение в подзапросе :)]]></description>
			<pubDate>Wed, 20 Jan 2010 21:56:04 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>20.01.2010 21:45:02 JayDi</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409370</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409370</link>
			<description><![CDATA[<blockquote><code><font color="black">/*сортировка товара по алфавиту*/<br/>
<font color="#0000ff">SET</font> @rownum := 0;<br/>
<font color="#0000ff">UPDATE</font><br/>
&nbsp;products p<br/>
<font color="#0000ff">SET</font><br/>
&nbsp;p.order_num = (<font color="#0000ff">SELECT</font><br/>
&nbsp;&nbsp;temp.new_order_num<br/>
&nbsp;<font color="#0000ff">FROM</font><br/>
&nbsp;&nbsp;(<font color="#0000ff">SELECT</font><br/>
&nbsp;&nbsp;&nbsp;p2.product_id,<br/>
&nbsp;&nbsp;&nbsp;((@rownum := @rownum + 1) * 10) <font color="#0000ff">AS</font> new_order_num<br/>
&nbsp;&nbsp;<font color="#0000ff">FROM</font><br/>
&nbsp;&nbsp;&nbsp;products p2<br/>
&nbsp;&nbsp;<font color="#0000ff">ORDER</font> <font color="#0000ff">BY</font><br/>
&nbsp;&nbsp;&nbsp;p2.model) <font color="#0000ff">AS</font> temp<br/>
&nbsp;<font color="#0000ff">WHERE</font><br/>
&nbsp;&nbsp;temp.product_id = p.product_id)</font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font></code></blockquote>]]></description>
			<pubDate>Wed, 20 Jan 2010 21:45:02 GMT</pubDate>
			<author>JayDi</author>
		</item>
	

	
		<item>
			<title>20.01.2010 20:48:21 Rafael_Delon</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409195</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409195</link>
			<description><![CDATA[Хорошо что возникла «интересная» задача! И автор написал пост.)]]></description>
			<pubDate>Wed, 20 Jan 2010 20:48:21 GMT</pubDate>
			<author>Rafael_Delon</author>
		</item>
	

	
		<item>
			<title>20.01.2010 20:44:57 o_O_Tync</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409185</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409185</link>
			<description><![CDATA[Я бы тоже не отказался. Правда.]]></description>
			<pubDate>Wed, 20 Jan 2010 20:44:57 GMT</pubDate>
			<author>o_O_Tync</author>
		</item>
	

	
		<item>
			<title>20.01.2010 20:43:17 TimTowdy</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/mysql/81394/#comment_2409177</guid>
			<link>http://habrahabr.ru/blogs/mysql/81394/#comment_2409177</link>
			<description><![CDATA[По-моему всё это можно выполнить одним запросом.]]></description>
			<pubDate>Wed, 20 Jan 2010 20:43:17 GMT</pubDate>
			<author>TimTowdy</author>
		</item>
	

	
</channel>
</rss>

