<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: MYSQL C API, SQL - запрос</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html</link>
    <description>Здравствуйте! Есть таблица tbl след. структуры (два поля):&lt;br&gt;&lt;br&gt;id (int) auto_increment,&lt;br&gt;value(int)&lt;br&gt;&lt;br&gt;В табл. tbl должно быть фиксированное кол-во строк(F_NUM), при том, что добавляются новые строки и старые необходимо удалять. Т.е. должно получиться типа что-то кольца.&lt;br&gt;&lt;br&gt;При добавления новой и удаления старой строки в итоге получится примерно след, F_NUM=4:&lt;br&gt;id            value&lt;br&gt;4294967292    10&lt;br&gt;4294967293    11&lt;br&gt;4294967294    12&lt;br&gt;4294967295    13&lt;br&gt;&lt;br&gt;Если попытаться добавить новую строку, то не получается т.к. id=int.(id не станет равным 0)&lt;br&gt;Реализация ниже (MYSQL C API). Видимо это не правильно. Подскажите пожалуйста, как это реализовать?&lt;br&gt;&lt;br&gt;...&lt;br&gt;mysql_query(conn,&quot;SELECT * FROM tbl ORDER BY id ASC&quot;);&lt;br&gt;res=mysql_store_result(conn);&lt;br&gt;NUM=mysql_num_rows(res); //Кол-во записей в tbl&lt;br&gt;&lt;br&gt;char buff&#091;250&#093;;&lt;br&gt;if(NUM&amp;gt;F_NUM) //кол-во записей в tbl больше чем положено F_NUM тогда&lt;br&gt;&#123;&lt;br&gt;int deff=NUM-F_NUM; //Кол-во записей которые надо удалить&lt;br&gt;sprintf(buff,&quot;DELETE FROM tbl ORDER BY id ASC LIMIT &#037;d&quot;,deff);&lt;br&gt;mysql_query(co</description>

<item>
    <title>MYSQL C API, SQL - запрос (Fisher)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#10</link>
    <pubDate>Wed, 07 May 2008 17:16:06 GMT</pubDate>
    <description>&amp;gt;&amp;gt;Вот только id при вставке новой записи будет &lt;br&gt;&amp;gt;&amp;gt;увеличиваться +1 (auto_increment)и достигнет своего максимально значения для int это 4294967295. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Если по одной записи в секунду, то понадобится около 136 лет :) &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;У меня одна запись в 15 секунд. Это 2040 лет. Значит не так часто мне придеться обнулять id :)&lt;br&gt;</description>
</item>

<item>
    <title>MYSQL C API, SQL - запрос (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#9</link>
    <pubDate>Wed, 07 May 2008 16:20:46 GMT</pubDate>
    <description>&amp;gt;Вот только id при вставке новой записи будет &lt;br&gt;&amp;gt;увеличиваться +1 (auto_increment)и достигнет своего максимально значения для int это 4294967295. &lt;br&gt;&lt;br&gt;Если по одной записи в секунду, то понадобится около 136 лет :)&lt;br&gt;</description>
</item>

<item>
    <title>MYSQL C API, SQL - запрос (Fisher)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#8</link>
    <pubDate>Wed, 07 May 2008 15:50:01 GMT</pubDate>
    <description>http://www.softtime.ru/forum/read.php?id_forum=3&amp;id_theme=2995&lt;br&gt;Обнуление счетчика можно сделать так:&lt;br&gt;ALTER TABLE tbl DROP COLUMN id;&lt;br&gt;ALTER TABLE tbl AUTO_INCREMENT=1&lt;br&gt;ALTER TABLE tbl ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>MYSQL C API, SQL - запрос (Fisher)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#7</link>
    <pubDate>Tue, 06 May 2008 09:18:03 GMT</pubDate>
    <description>&amp;gt;М-да. С триггерами не получится. Извиняюсь за дезинформацию. Внутри триггера нельзя модифицировать &lt;br&gt;&amp;gt;таблицу на которой вызывается триггер. &lt;br&gt;&lt;br&gt;Все равно спасибо, узнал про триггеры. В принципе, тот код который я приводил, он работает. Вот только id при вставке новой записи будет увеличиваться +1 (auto_increment)и достигнет своего максимально значения для int это 4294967295. Хотя для моей таблицы это произойдет не скоро, можно использовать bigint вместо int для id. &lt;br&gt;&lt;br&gt;Видимо, если все-таки id станет максимальным значением, то необходимо создать временную таблицу по аналогии со старой (структура и данные), удалить старую таблицу и переименовать временную таблицу  в название старой.&lt;br&gt;</description>
</item>

<item>
    <title>MYSQL C API, SQL - запрос (Xela)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#6</link>
    <pubDate>Tue, 06 May 2008 07:22:10 GMT</pubDate>
    <description>М-да. С триггерами не получится. Извиняюсь за дезинформацию. Внутри триггера нельзя модифицировать таблицу на которой вызывается триггер.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>MYSQL C API, SQL - запрос (Xela)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#5</link>
    <pubDate>Tue, 06 May 2008 06:28:27 GMT</pubDate>
    <description>Это тоже не проблема. Только я можно я не буду приводить пример, как сделать так, что бы удаление срабатывало только если количество записей больше N?&lt;br&gt;</description>
</item>

<item>
    <title>MYSQL C API, SQL - запрос (Eye)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#4</link>
    <pubDate>Tue, 06 May 2008 06:21:45 GMT</pubDate>
    <description>&amp;gt;http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Ну и приблизительно так: &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;delimiter &amp;#124; &lt;br&gt;&amp;gt;create trigger on имяттриггера before insert on имятаблицы &lt;br&gt;&amp;gt;  for each row &lt;br&gt;&amp;gt;  begin &lt;br&gt;&amp;gt;  delete from имятаблицы where id=(select min(id) from имятаблицы); &lt;br&gt;&amp;gt;  end; &lt;br&gt;&lt;br&gt;ему нужно, чтобы не сразу удалял, а только когда записей больше n, а такой тригер будет срабатывать каждый раз придобавлении записи&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>MYSQL C API, SQL - запрос (Xela)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#3</link>
    <pubDate>Tue, 06 May 2008 05:48:07 GMT</pubDate>
    <description>http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html&lt;br&gt;&lt;br&gt;Ну и приблизительно так:&lt;br&gt;&lt;br&gt;delimiter &amp;#124;&lt;br&gt;create trigger on имяттриггера before insert on имятаблицы&lt;br&gt;  for each row&lt;br&gt;  begin&lt;br&gt;  delete from имятаблицы where id=(select min(id) from имятаблицы);&lt;br&gt;  end;&lt;br&gt;&amp;#124;&lt;br&gt;&lt;br&gt;После создания такого триггера, MySQL _сам_ будет удалять запись с наименьшим ID при добавлении записи в таблицу.&lt;br&gt;</description>
</item>

<item>
    <title>MYSQL C API, SQL - запрос (Fisher)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7351.html#2</link>
    <pubDate>Mon, 05 May 2008 14:13:19 GMT</pubDate>
    <description>&amp;gt;Вы так путано все объяснили... Но может быть проще незабивать себе голову, &lt;br&gt;&amp;gt;а повесить на эту таблицу триггер на insert, который и будет &lt;br&gt;&amp;gt;удалять необходимые записи при добавлении новой? &lt;br&gt;&lt;br&gt;Да, извините, хотел как можно компактнее. С триггерами не работал, можно пример или ссылку. Спасибо! &lt;br&gt;На самом деле не так все и сложно. Может так проще будет:&lt;br&gt;&lt;br&gt;id  val&lt;br&gt;1    10 &amp;lt;- Удаляем запись DELETE(), т.к. записей в таблице недолжно быть &amp;gt; 4(например)&lt;br&gt;2    11&lt;br&gt;3    12&lt;br&gt;4    13 &lt;br&gt;5    14 &amp;lt;- добавили новую запись INSERT()&lt;br&gt;&lt;br&gt;Получаем:&lt;br&gt;id   val&lt;br&gt;2    11&lt;br&gt;3    12&lt;br&gt;4    13 &lt;br&gt;5    14&lt;br&gt;&lt;br&gt;Затем втавляем след. запись, получаем:&lt;br&gt;&lt;br&gt;id   val&lt;br&gt;3    12&lt;br&gt;4    13 &lt;br&gt;5    14&lt;br&gt;6    15&lt;br&gt;&lt;br&gt;Может здесь id и не нужен, но мне как-то надо было определить какая запись более старая (наименьший id)&lt;br&gt;</description>
</item>

</channel>
</rss>
