Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Порядок записей 
:(
    Опции темы
Spectre
Дата 22.7.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 18.1.2006
Где: Беларусь, г. Минс к

Репутация: нет
Всего: нет



Есть таблица id, title, body, num
num - это порядковый номер в котором выводить на экран запись.
Мне надо сделать так, что бы при введении новой записи в бд у меня они переставлялись.

То есть при наличии 7 записей я ввожу 8-ю и указываю что бы ее порядковый номер был 3, а все остальные записи в БД, включая текущую третью и выше, обновляли порядковый номер на num + 1.

Вот пока так сделано:
Код

        $last = $nuw - 1;
        $new_num = $num;
        $sql = "select * from faq where faq_num > '$last'";
        $result = mysql_query($sql);
        while ($row = mysql_fetch_array($result)) {
            $new_num = $row["faq_num"] + 1;
            $id_num = $row["faq_id"];
                $sql2 = "update faq set faq_num = '$new_num' where faq_id = '$id_num'";
                mysql_query($sql2);
        }
        $sql = "insert into faq values(null, '$question', '$answer', '$num')";
        mysql_query($sql);
        echo "<meta http-equiv='refresh' content='0; url=main.php?show=addfaq'>\n";

$num - это получаемый номер записи из формы добавления записи.
Тут несколько лишних записей которые можно изменить, но должно работать помоему. А не работает. Он присваивает новой записи тот порядковый номер который я указываю, а остальные записи получают последний, тот который должен был быть у этой если бы я не поменял. 
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 22.7.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Spectre, что-то я не понял.. а в чём проблема то.. тебе нужно именно чтобы в `num` всё переименовать или чтоб выводить в порядку? 

Если только выводить, то достаточно отсортировать по полю `num` и всё, ну плюс добавить какое-нибудь дополнительное поле для сортировки, например `data` (ну чтоб сортировать если будет несколько одинаковых `num`)

а вообще-то это наверное в раздел PHP
вот код, что не понятно, спрашивай
Код

<?php
mysql_connect('localhost', 'root', '') or die("Ошибка соединения");
mysql_query("SET NAMES cp1251;");
mysql_select_db('test');


$num = 3; // новый порядковый номер
$z = "SELECT * FROM `qq` WHERE `num`>=".$num." ORDER BY num";
$r = mysql_query($z);
$a = mysql_num_rows($r);

// читаем в переменную выборку
if($a>0){
    for($i=0; $i<$a; $i++){
        $f = mysql_fetch_array($r);
        $rez[$i]['num'] = $f['num'];
        $rez[$i]['id'] = $f['id'];
    }
}
// изменяем в базе `num` на `num`+1
for($i=0; $i<$a; $i++){
    $new_num = $rez[$i]['num'] + 1;
    $z = "UPDATE `qq` SET `num`=".$new_num." WHERE `id`=".$rez[$i]['id'];
    $r = mysql_query($z);
}
// вставляем новую строку с $num
$z = "INSERT INTO `qq` ( `id` , `num` , `text` )
        VALUES ('', '".$num."', 'текст')";
    $r = mysql_query($z);
?>

 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Spectre
Дата 22.7.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 18.1.2006
Где: Беларусь, г. Минс к

Репутация: нет
Всего: нет



Отсортировать по num не проблема... num у меня всегда должен быть уникальным. Но при этом если я при введении нового вопроса указываю уже существующий num, то он должен выдать этому вопросу этот номер, а все вопросы последующие, и тот который заменили должны сдвинуться на единицу вперед. Был 2 стал 3 и т.д.
Как составить такой запрос. 
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 22.7.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



как сделать всё это одним запросом пока не представляю... что-то не выходит... а на PHP я тебе написал, вроде всё работает как ты хочешь 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
skyboy
Дата 22.7.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



поясни, пожалуйста, id - это уникальное поле? Или ты по нему определяешь, что куда вставлять? Набросай короткий пример лучше - что было и как стало.... 
PM MAIL   Вверх
Spectre
Дата 22.7.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 18.1.2006
Где: Беларусь, г. Минс к

Репутация: нет
Всего: нет



id у меня уникален и я не по нему определяю...
Пример такой
У меня есть таблицв. id / body / num
id - уникален и имеет свойство auto_incriment или как там. Второй ряд содержит то что надо выводить на экран. А третий - порядок в котором выводить. Там числовое значение.
Забиваю базу через форму на страничке сайта. При этом у меня автоматически высчитывается значение поля num что бы не повторялось.
Допустим забил в базу 5 значений... получилось у меня num от 1 до 5. Теперь я забиваю значение шестое.. но мне надо, что бы оно было не шестым по порядку а например вторым... В форме я меняю автоматом поставленную 6-ку на 2.
Нажимаю "Добавить" и мне надо что бы он сместил во всех записях от 2 до 5 значение поля num на 1. А потом вставил 6-ю запись со значением num = 2... 
А поле с id = 2, то есть второе забитое, у которого раньше и num = 2 обновилось. Там num теперь 3. так же и с остальными до конца таблицы. 

Было до

id / body / num

1 / а / 1
2 / б / 2
3 / в / 3

Ввожу новую строку:

4(автоматом, я не могу изменить) / г/ 2(сам поменял. Предлагало 4)

Получается:

1 / а / 1
2 / б / 3
3 / в / 4
4 / г / 2 

Это сообщение отредактировал(а) Spectre - 23.7.2006, 09:42
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.