![]() |
|
Модераторы: skyboy |
![]()
|
|
| Geni |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
Работаю в связке PHP + MySQL. Есть написанный мною движок добавления новостей в базу данных. Осуществляется это следующим образом:
где id_news – первичный ключ (1..N) $td – название поля с хранящейся информацией (в него и осуществляется добавление новостей). $data – данные для вставки. Оператор while и внутренняя проверка необходимы для вставки данных после последней записи. Т.е. имеет место быть случай, когда соседний столбец имеет больше записей, чем текущий (в который мы вставляем данные), поэтому необходима использовать именно запрос UPDATE для замены значения NULL на вставляемые данные. Если такого не произошло (текущий столбец имеет больше записей, чем соседний), то выполняется тело оператора условия, идущего после while, а именно запрос INSERT INTO. Раньше, пока соседний столбец имел больше записей, чем текущий (т.е. выполнялся запрос UPDATE), всё работало отлично. Но после того, как количество записей в текущем столбце превысило количество записей в соседнем начались проблемы. Например. Мне нужно добавить 5 новостей. Несколько из них (2-3) добавятся правильно (т.е. запрос INSERT INTO отработает как нужно – вставка данных после последней записи в столбце), но следующая добавится между начальными записями таблицы. Т.е. 3 первые новости добавятся с первичными ключами 340, 341, 342 после 339-й записи, а новость с первичным ключом 343 добавиться между 23-й и 24-й. Я не знаю, почему так происходит. Как это исправить? Скриншот для наглядности: |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Номер (первичный ключ) присвоен правильно? правильно. Значит, с базой всё в порядке, а проблема в тебе. Точнее, в полном непонимании тобой, что такое реляционные БД.
Пока нет ORDER BY, понятие порядка не существует. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Geni |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
Спасибо. С ORDER BY работает. По поводу произвольной вставки данных нашёл небольшое обсуждение на ЛОРе. Из прочитанного понял, что обычно данные вставляются по очерёдности их добавления, но есть случаи подобные моему – когда данные вставляются произвольно. Есть вопрос: можно ли каким-нибудь образом всё-таки вставлять данные по очерёдности их добавления? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Бред. Даже не читая - если из него можно сделать ТАКОЙ вывод. Данные физически вставляются в таблицу так, как сервер БД сочтёт нужным. Исключение - наличие кластерного индекса, тогда физически данные вставляются в порядке следования этого индекса. Однако повторю: в реляционных БД без указания порядка сортировки не определено понятие порядка записей. В частности это одначает, что два выполнения одного и того же запроса, не содержащего ORDER BY, могут вернуть одни и те же записи в РАЗНОМ порядке. Так что не воюй с ветряными мельницами. Учи матчасть и указывай сортировку ЯВНО. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |