Помогите с MySQL

D
На сайте с 10.02.2012
Offline
50
566

Нужно добавить в таблицу MySQL примерно 50к новых записей.

В одной руке у меня текстовый файл в котором 50к айдишников, в другой вот такой запрос:

INSERT INTO `dle_post_extras` (`eid`, `news_id`, `news_read`, `allow_rate`, `rating`, `vote_num`, `votes`, `view_edit`, `disable_index`, `related_ids`, `access`, `editdate`, `editor`, `reason`, `user_id`) VALUES

(проблема1, проблема2, 0, 1, 5, 1, 0, 0, 0, '', '', 0, 'username', '', 0);

Проблема1 - это eid,

eid идут по порядку. Я знаю последний - его номер 4190, но не знаю как к нему автоматом добавить +1 и так 50к раз подряд. Т.е. нужно добавлять 4191,4192,4193,4194 и т.д.

Проблема2 - это текстовый файлик в котором лежит 50к айдишников для news_id на моем локальном компе. Айдишники записаны каждый раз с новой строки и идут не по порядку, поэтому нельзя зацепиться за последний и автоматом добавить +1. Идут не по порядку - это значит, что в моём текстовом файле они выглядят вот так:

1

2

5

6

.

.

.

49997

49998

50000

Т.е. айдишников с номерами 3, 4 и 49999 там просто нет и быть не может.

Как сформировать MySQL запрос? Помогите, потому что мозгов не хватает :gm:

Nosce te ipsum
-O-O-
На сайте с 27.05.2006
Offline
140
#1

Не шарю в DLE, но предполагаю, что колонка eid в таблице с auto increment, следовательно вставлять туда ничего не нужно, просто пустое значение (сам посчитает и вставит): ('', проблема2, 0, 1, 5, 1, 0, 0, 0, '', '', 0, 'username', '', 0);

D
На сайте с 10.02.2012
Offline
50
#2
-O-O-:
Не шарю в DLE, но предполагаю, что колонка eid в таблице с auto increment

И ваше предположение верно! Проблема1 решена! Спасибо!☝

Теперь осталось разобраться с проблемой 2. В принципе эти айдишники я могу брать не только с тектового файла но и селектом с той же базы но с другой таблицы. Если бы этот селект можно было вставить в запрос... Т.е. вот так как-нибудь можно?

INSERT INTO `dle_post_extras` (`eid`, `news_id`, `news_read`, `allow_rate`, `rating`, `vote_num`, `votes`, `view_edit`, `disable_index`, `related_ids`, `access`, `editdate`, `editor`, `reason`, `user_id`) VALUES

('', вставить то, что отдаст селект, 0, 1, 5, 1, 0, 0, 0, '', '', 0, 'username', '', 0);

Какой тут правильный синтаксис и можно ли в принципе такой запрос сформировать?

---------- Добавлено 10.04.2013 в 14:21 ----------

Ещё появилась проблема №3. В поле `vote_num` хотелось бы рандомно вставить значения в диапазоне от 1 до 120. Хотя это скорее не проблема, а так, необходимость, без которой можно обойтись. Но все же надо бы...

-O-O-
На сайте с 27.05.2006
Offline
140
#3

Проще скрипт написать, который пройдется по текстовику и вставит рандомные значения.

Судя по названию столбцов, эта таблица хранит параметры статьи и цепляется по news_id.

Поэтому то, что у Вас идет не по порядку - это нормально:

1

2

5

6

Каждая строка будет привязана к новости. Может id новости под номером 3 - не существует просто.

Рандомное значение попробуйте вставлять - FLOOR(1 + RAND() * 120)

D
На сайте с 10.02.2012
Offline
50
#4
-O-O-:
Судя по названию столбцов, эта таблица хранит параметры статьи и цепляется по news_id.

Так и есть. В этой таблице news_id обязательно должны быть равны значениям id в таблице с которой можно дернуть айдишники. Я в принципе уже нагуглил как селектом скопировать айдишники, вот так:

INSERT INTO `dle_post_extras` (`news_id`)

SELECT `id` //здесь лежат нужные айдишники

FROM `dle_post` //которые я выдераю из dle_post

WHERE `raw_population` IS NOT NULL; //это я так айдишники нужные определяю

Не знаю на сколько это правда, но очень на неё похоже. Но проблему2 это не решает т.к. этот запрос надо как то добавить к моему предыдущему... Чувствую что истина уже где то очень рядом.

p.s. Рандом работает, спасибо!

p.p.s. Всё, разобрался, -O-O-, огромное спасибо за помощь! Очень пригодилось!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий