powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пропуски в первичном ключе при IGNORE.
22 сообщений из 47, страница 2 из 2
Пропуски в первичном ключе при IGNORE.
    #38711056
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я ничего и не отстаиваю, я просто пытаюсь понять, что мне написали. Я ещё на том уровне, где лучше словами писать, а не «session — begin». Мне и самому смешно уже, но только от того, что всё в какое-то недоразумение заходит.
Короче, выше я привёл своё решение через дополнительнй проверочный запрос — имеет оно право на жизнь? Лучше можно сделать? Вот и всё…
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38711075
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkКороче, выше я привёл своё решение через дополнительнй проверочный запрос — имеет оно право на жизнь? Лучше можно сделать? Вот и всё…Вариант лучше уже был выше - 16382506
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38711598
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkРешил проблему через дополнительный проверочный запрос.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<?php
session_start();
$id_pol = $_SESSION['id_pol'];
require_once ('bd.php');
$imya_nabora = time();
$massiv_itog = $_SESSION["SESSION_massiv_itog"];

if ($massiv_itog) {
    //%%%%%%%% SQL_zapros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    mysql_query("  
INSERT INTO `".$id_pol."--tn` (`n`)  
VALUES ('".$imya_nabora."')");
    for ($i = 0;$i < count($massiv_itog);$i++) {
        //делаем повторяющуюся часть запроса
        $slovo = mysql_fetch_array(mysql_query(" 
SELECT `s` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."' 
"));
var_dump($slovo);
        if ($slovo == FALSE) {
            mysql_query("  
INSERT INTO `ts` (`s`)  
VALUES ('".$massiv_itog[$i]."')");
        }
        mysql_query("  
INSERT INTO `".$id_pol."--t_s` (`id_n`, `id_s`)  
VALUES ((SELECT `idn` FROM `".$id_pol."--tn` WHERE `n` = '".$imya_nabora."'),  
        (SELECT `ids` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."'))  
");
    }
    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
}
mysql_close($podkluchenie);
unset($_SESSION["SESSION_massiv_itog"]);
require_once ('1_vvod_slov.php');
?>




надо делать не
insert... values

а

insert ...
select ...
where not exists ( select... where запись с этим ключем )

третье уже в теме намекали.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38713581
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
//проверяем на наличие слова в базе
			$slovo = mysql_fetch_array(mysql_query(" 
			SELECT `s` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."' 
			"));
			//вставляем слово, если его ещё нет в базе
			if ($slovo == FALSE)
			{
				mysql_query("  
				INSERT INTO `ts` (`s`)  
				VALUES ('".$massiv_itog[$i]."')");
				}


Ту т получается риск сбоя, если одно и то же отсутствующее слово будет проверяться одновременно двумя пользователями. Я не знаю суть действия БД Мускуль, поэтому хочу спросить: если переписать всё это в один запрос, то вероятность сбоя останется или нет? И помогите, пожалуйста, составить запрос.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38713584
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

insert ignore
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38713587
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejk,

insert ignore
Короче, с чего начал, к тому и пришёл? ТОлько через игнорирование? И иначе никак?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38713589
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk, ну а как вы себе это представляете? можно, конечно, использовать lock table, но тогда зачем вам вообще мускль, пишите сразу на foxpro 2.0 :)
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38713594
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejk, ну а как вы себе это представляете? можно, конечно, использовать lock table, но тогда зачем вам вообще мускль, пишите сразу на foxpro 2.0 :)
что вы имеете ввиду? я не знаю, чем foxpro 2.0 отличается
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38713596
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но ведь повышение пк из-за каждого запроса это же расход пк вхолостую. Или дойдя до своего предела, он начнёт незанятые словами пк занимать по второму кругу? Если так, то тогда нормально, слов не добавиться больше, чем int. Можете эту тонкость пояснить?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38713602
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkИли дойдя до своего предела, он начнёт незанятые словами пк занимать по второму кругу? 2634217
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38713690
Users
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkНо ведь повышение пк из-за каждого запроса это же расход пк вхолостую. Или дойдя до своего предела, он начнёт незанятые словами пк занимать по второму кругу? Если так, то тогда нормально, слов не добавиться больше, чем int. Можете эту тонкость пояснить?

Значит, меньше слушайте спецов по переменным, а больше - спецов по sql. Я вам, тем более, уже писал, как именно надо составить запрос.

Допустим, tbl_ts - таблица, куда мне надо вставить данные, при этом проверив, что таких id в ней нет.
ts_new - таблица, в которой новые данные лежат.

Код: sql
1.
2.
insert tbl_ts(id)
select tn.id from tbl_ts_new tn where tn.id not in (select id from tbl_ts);



Всё. Один запрос.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714080
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я прошу прощения, но как ваш вариант прикрутить к моей задаче, у меня, ведь, нет никаких других таблиц, только одна, в которую постоянно вставляют слова пользователи? У меня не с чем сравнивать id.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714088
Users
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

Надо просто подумать. It's easy. Ну, нет id - ничего страшного. Слова-то есть?
Код: sql
1.
2.
insert tbl_ts(word)
select tn.word from tbl_ts_new tn where tn.word not in (select word from tbl_ts);
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714120
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но слова-то пользователи сами пишут, откуда их select делать?

insert tbl_ts(word) — пытаемся вставить слово от пользователя в таблицу, это понятно…

select tn.word from tbl_ts_new tn — а это не понятно, откуда мы берём слово?… Сто из моего примера выступает в роли tbl_ts_new?

where tn.word not in (select word from tbl_ts); — …, всё, заглох…

Пожалуйста, перепешите мой изврат
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
//проверяем на наличие слова в базе
			$slovo = mysql_fetch_array(mysql_query(" 
			SELECT `s` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."' 
			"));
			//вставляем слово, если его ещё нет в базе
			if ($slovo == FALSE)
			{
				mysql_query("  
				INSERT INTO `ts` (`s`)  
				VALUES ('".$massiv_itog[$i]."')");
				}


используя мои названия. Мне так легче понять будет логику.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714155
Users
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk
Код: sql
1.
massiv_itog



Не буду переписывать. Я вообще не сторонник давать рыбу нахаляву, а удочку я вам дал.
Слова у вас лежат в massiv_itog - думайте, как этот массив целиком подствить вместо tbl_ts_new.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714190
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А слона-то мы и не заметили))) Я б не догадался массив, как новую таблицу рассмотреть… По крайней мене до пенсии)

Так, я понял логику:
вставить в таблицу из массива только те слова, которые получатся, если выбрать из массива только те слова, которых в этой таблице нет.
Если дословно… Правильно?

Но, блин, я, видимо, не вижу очередного слона — как массив прикрутить к запросу?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714225
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,
открой для себя хранимые процедуры


если боишься переполнения bigint

но это изврат
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714240
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usersandrejk
Код: sql
1.
massiv_itog



Не буду переписывать. Я вообще не сторонник давать рыбу нахаляву, а удочку я вам дал.
Слова у вас лежат в massiv_itog - думайте, как этот массив целиком подствить вместо tbl_ts_new.

Так, что ли?
Код: sql
1.
2.
3.
4.
insert ts.s
select tn
from (SELECT `s` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."') tn 
where tn not in (select s from ts)
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714243
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяandrejk,
открой для себя хранимые процедуры


если боишься переполнения bigint

но это изврат

Как вы они мне помогут, чтоб я знал, с какой стороны их открывать для экономии времени?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714312
Users
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

не так.

Код: sql
1.
2.
3.
4.
insert ts.s
select tn
from (SELECT `s` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."') tn 
where tn not in (select s from ts)



tn - это название выборки, что следует вот из этого: from (SELECT `s` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."') tn

тогда выходит следующий запрос: select tn from tn - это вернет ошибку. Поля tn у вас нет.
Далее потом: WHERE `s` = - в случае массива надо менять на Where S in
Далее еще более потом: where tn not in - это вернет ошибку. Поля tn у вас нет.

когда я пишу
Код: sql
1.
select tn.s from tbl_new_value tn 

- там tn является алисом таблицы. Алиас помогает написать запрос короче и гибче его менять. Если бы алиса не было, такая запись выглядела бы так:
Код: sql
1.
select tbl_new_value.s from tbl_new_value



Все, это последняя моя запись в этой теме. Что и как делать - понятно, осталось только подумать, этого за вас никто не сделает.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714388
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UsersВсе, это последняя моя запись в этой теме. Что и как делать - понятно, осталось только подумать, этого за вас никто не сделает.
Подумать — это хорошо, когда есть чем оперировать, например знанием забытых особенностей и возможностей синтаксиса. Мне оперировать нечем, я вообще не программист и не студент, я делаю себе маленький инструмент в виде сайта и познакомился пока только с эллементарным синтаксисом. Я начал с нуля недели три назад: PHP + MySQL. Можно, конечно, потратить два года на изучение всех тонкостей, только мне нужно сейчас и не все тонкости, а пока только те, что необходимы.
Вот сейчас я не знаю как обращаться с массивами в запросах, я вообще не знаю как это называется, чтобы поискать в интернете, а вы мне пишете отрывки синтаксиса, буд-то мне его вспомнить только осталось.
Я сейчас только прикоснулся ко всему этому, я обращаю внимание даже на регистр в том, что вы мне пишете — сложновато получается, когда все пишут по-разному.
Спасибо, конечно, за ответ, но помощь почему-то превращается в воспитание. Почему все думают, что человек, который просит пару строчек кода, обязательно ищет халяву? Я учусь по вашему коду, как если бы учился по другому коду в другом месте, в книгах и т. д. Как учиться не читая чужие коды? Если сократить всё «уравнение», то получается, что всё выглядит так: мы тебе ничего не напишем, ищи сам, где уже написали. И в чём разница? И так и так буду по написанному кем-то коду учиться.
Я не знаю особенностей синтаксиса, но по примеру могу переделать под свою задачу.

Я понял логику вашего примера, я знаю, что tn это псевдоним, но мне не понятно, как там массив учесть… Подозреваю, что надо что-то дописать к tn, но что?

Где почитать про то, как совместить запрос с массивом, как вообще это называется? Это хоть можете подсказать?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38714592
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, сделал эксперимент — добавил вручную максимальное значение ПК и потом добавил ещё одну запись. БД стала занимать пустые места сначала отсчёта, так что нахрен все эти танцы с бубном, буду через IGNORE добавлять.

Вопрос решён, тема закрыта.
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пропуски в первичном ключе при IGNORE.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]