Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: хаотический INSERT INTO

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Axiles
Отправлено: 28 Октября, 2010 - 11:41:38
Post Id


Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




есть скрипт который добавляет в таблицу строку и нумерует первый столбей в соответствии с количеством уже имеющихся, тоесть если в таблице пять строк то номер следующей будет шесть и так далее.
PHP:
скопировать код в буфер обмена
  1. function plus ($sql)
  2.     {
  3.     $op = 1;
  4.     $x = 0;
  5.      while ($x==0)
  6.       {
  7.       $myrow = mysql_fetch_array($sql);
  8.       if (!$myrow)
  9.         {
  10.         $x = 1;
  11.         }
  12.         else
  13.          {
  14.          $op++;
  15.          }                                                                              
  16.       }
  17.     $seek = "INSERT INTO testnpp VALUES('$op','26','25')";
  18.     $result = mysql_query($seek);
  19.     }

если в таблице нет строк то он начинает нумерацию с 1.
но вот почему то строки в таблице распологаются не по порядку
вот результат выполнения скрипта:
5,3,1,6,2,4
2,4,6,1,5,3
5,7,2,1,6,3,4
по какому принципу так происходит?
 
 Top
Варяг
Отправлено: 28 Октября, 2010 - 11:48:28
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




строки, как и поля (столбцы) в таблице располагаются хаотично. При выборке данных нужно указать сортировку ORDER BY `столбец поле` ASC - выстроит данные по возрастанию

(Отредактировано автором: 28 Октября, 2010 - 11:49:30)

 
 Top
Мелкий Супермодератор
Отправлено: 28 Октября, 2010 - 11:55:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Чем люди не занимаются, лишь бы auto_increment не использовать...


-----
PostgreSQL DBA
 
 Top
Варяг
Отправлено: 28 Октября, 2010 - 12:18:34
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Мелкий, это слишком просто Радость
 
 Top
Axiles
Отправлено: 28 Октября, 2010 - 12:36:10
Post Id


Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




пока ждал ответа решил принудительно перенумеровать столбец, вот скрипт:
PHP:
скопировать код в буфер обмена
  1. function rebut ()
  2.     {
  3.     $sql = mysql_query("SELECT testnpp.1, testnpp.2, testnpp.3 FROM testnpp")or die("Invalid query: " . mysql_error());
  4.     $op = 1;
  5.     $x = 0;
  6.     while ($x==0)
  7.       {
  8.       $myrow = mysql_fetch_array($sql);
  9.       if (!$myrow)
  10.          {
  11.          $x = 1;
  12.          }
  13.          else
  14.          {
  15.          mysql_query("UPDATE testnpp SET testnpp.1 = '$op' WHERE testnpp.1 = '$myrow[0]'");
  16.          echo "UPDATE testnpp SET 1 = $op WHERE 1 = $myrow[0]";echo "<BR>";
  17.          }
  18.       $op++;
  19.       }
  20.     }

результат воще убил на повал, еси в первом случае понятно то тут .....
столбец до перенумерации
2,1,4,3
после
2,2,4,4,5 (добавляет в конце новую строку)
этот же столбец после вторичной обработки
1,1,3,3,6,6
и ещё раз Улыбка
2,2,4,4,5,5,7
 
 Top
OrmaJever
Отправлено: 29 Октября, 2010 - 01:20:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Axiles пишет:
PHP:
скопировать код в буфер обмена
  1. $seek = "INSERT INTO testnpp VALUES('$op','26','25')";

с такой стройкой sql запрос точно не будет работать...
Между именем таблицы и словом VALUES должны стоять названия колонок в которые запизуешь !!!
PHP:
скопировать код в буфер обмена
  1. $seek = "INSERT INTO testnpp (row1, row2, row3) VALUES('$op','26','25')";

(Добавление)
И если же скрипт записал всё в таблицу но просблема вывестипо порядку
Axiles пишет:
вот результат выполнения скрипта:
5,3,1,6,2,4

томожно просто использовать ORDER BY
CODE (SQL):
скопировать код в буфер обмена
  1. 'SELECT * FROM table (WHERE если нужно) ORDER BY row_name asc'

Подмигивание

(Отредактировано автором: 29 Октября, 2010 - 01:20:34)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DlTA
Отправлено: 29 Октября, 2010 - 02:30:45
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




OrmaJever пишет:
Axiles пишет:
PHP:
скопировать код в буфер обмена
  1. $seek = "INSERT INTO testnpp VALUES('$op','26','25')";

с такой стройкой sql запрос точно не будет работать...

работает
хотя указывать имена столбцов есть хороший прием к дальнейшему расширению проекта
(Добавление)
Axiles, попробуйте все же для ключевого в свойствах поставить автоинкримент
а для добавления использовать запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO `testnpp` ( `testnpp.2`, `testnpp.3`) VALUES('26','25')

при таком запросе новая ячейка ключевого поля будет автоматически принимать последующее значение, а в остальные столбцы добавляется указанная инфа

p.s.
а с именами столбцов иначе никак нельзя? уж очень коряво выглядят названия в виде цифр.

(Отредактировано автором: 29 Октября, 2010 - 10:18:10)

 
 Top
Axiles
Отправлено: 29 Октября, 2010 - 07:08:26
Post Id


Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




DlTA пишет:
попробуйте все же для ключевого в свойствах поставить автоинкримент
сори, это как?
(Добавление)
Axiles пишет:
p.s.
а с именами столбцов иначе никак нельзя? уж очень коряво выглядят названия в виде цифр.

да это тестовый скрипт, как тока он заработает как нада имена изменятся
(Добавление)
а что скажете по поводу переименовать ? почему он так себя ведёт?
 
 Top
Uchkuma
Отправлено: 29 Октября, 2010 - 09:42:03
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Axiles пишет:
есть скрипт который добавляет в таблицу строку и нумерует первый столбей в соответствии с количеством уже имеющихся, тоесть если в таблице пять строк то номер следующей будет шесть и так далее.
С какой целью вы хотите это сделать? И не путаете ли вы нумерацию с сортировкой?
Axiles пишет:
но вот почему то строки в таблице распологаются не по порядку

mysql все делает правильно делает, просто вы не понимаете, как она работает. Правильные ответы вам уже дали:
auto_increment
CODE (SQL):
скопировать код в буфер обмена
  1. ALTER TABLE `yourtable` CHANGE `youfield` `youfield` INT( 11 ) NULL AUTO_INCREMENT
и ORDER BY youfield в запросе выборки.
 
 Top
Axiles
Отправлено: 29 Октября, 2010 - 10:05:16
Post Id


Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Uchkuma пишет:
С какой целью вы хотите это сделать? И не путаете ли вы нумерацию с сортировкой?
Сортировать мнене надо, хотя как это сделать понял, спасибо. Нумерация строк мне нужна, с ней я буду работать в далбнейшем.
А можно пример кода с auto_increment?
И всё таки, почему так работает скрипт принудительной пронумировки? Или новую тему создавать?
 
 Top
Uchkuma
Отправлено: 29 Октября, 2010 - 10:24:15
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Axiles пишет:
Нумерация строк мне нужна, с ней я буду работать в далбнейшем.
Вы не ответили на вопрос!
Uchkuma пишет:
С какой целью вы хотите это сделать?

Axiles пишет:
А можно пример кода с auto_increment?
Как изменить тип поля на auto_increment я выше написал вам запрос. При добавлении каждой новой строки, значение этого поля будет каждый раз на единицу больше.
 
 Top
Axiles
Отправлено: 29 Октября, 2010 - 10:35:32
Post Id


Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Uchkuma пишет:
Вы не ответили на вопрос!
Пронумеровать строки чтобы в дальнейшем работать с этими строками с помощью этих номеров. Удаление, перемещение и т.п. Теперь ответил?

(Отредактировано автором: 29 Октября, 2010 - 10:38:38)

 
 Top
Uchkuma
Отправлено: 29 Октября, 2010 - 11:28:10
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Понятно, что работать, не задаром же они там. Теперь ответили.
Вы изначально неправильно сформулировали свой вопрос, что породило десяток лишних постов в этой теме. Ваш ответ auto_increment. В phpmyadmin при редактировании столбца есть такая опция - активируйте ее. Больше ничего делать не надо, нумерация будет вестись автоматически.
 
 Top
Варяг
Отправлено: 29 Октября, 2010 - 15:06:51
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




при создании таблицы будет выглядеть так
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `yourtable` (
  3. `yourpole` int(3) NOT NULL AUTO_INCREMENT,
  4. PRIMARY KEY(`yourpole`)
  5. );
  6.  
 
 Top
Мелкий Супермодератор
Отправлено: 29 Октября, 2010 - 15:42:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




OrmaJever пишет:
с такой стройкой sql запрос точно не будет работать...
Между именем таблицы и словом VALUES должны стоять названия колонок в которые запизуешь !!!

Перечитайте всё-таки, пожалуйста, ман. Явное перечисление колонок - хороший стиль, но для работы запроса вовсе не обязателен.


-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB