powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пропуски в первичном ключе при IGNORE.
47 сообщений из 47, показаны все 2 страниц
Пропуски в первичном ключе при IGNORE.
    #38709631
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая оказия… Вот запрос:

Код: sql
1.
2.
3.
mysql_query(" 
INSERT IGNORE INTO `ts` (`s`) 
VALUES ('" . $massiv_itog[$i] . "')");



Это повторяющаяся часть запроса, вырезанная из цикла. Здесь в таблицу заносится массив слов с пропуском уже существующих. Но заметил, что эта зараза слова-то пропускает, а вот первичный ключ повышает всё равно и получаются большие дырки в первичном ключе: занёс слов сто, а показывает номер последнего слова аж за 800…

Как сделать так, чтобы пропуская уже существующее в таблице слово, первичный ключ не накручивался, а повышался только при записи именно нового слова?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38709636
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это тебя не должно волновать.
значений первичного ключа тебе хватит с бльшим запасом.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38709664
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+а если нужна своя нумерация, то надо завести своё поле для своей нумерации, т.к. нумерация не есть назначение ПК.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38709921
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но вы так и не ответили, на это можно повлиять или нет?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38709924
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkНо вы так и не ответили, на это можно повлиять или нет?Нет.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38709930
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее, можно, но ухудшив производительность. Схема такая:
1) Блокируете таблицу
2) SELECT-ом проверяете наличие нужной записи
3) Если нет, то INSERT
4) Снимаете блокировку

Это приведет к ухудшению быстродействия как отдельных вставок, так и в массе из разных сессий (они будут выполняться последовательно).
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710028
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто получается очень огромные дырки будут, т. к. в бд постоянно будут попытки занести дубликат. И среди этих попыток, если появится слово новое, то у него будет уже огроменный индекс. Может тогда лучше переписать запрос, чтобы проверялось сначала наличие , а потом только вставлялось?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710037
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkу него будет уже огроменный индексНу и что? Это вещь сугубо технологическая, не стоит о ней беспокоиться.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710113
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 31.07.2014 06:29, andrejk wrote:

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

Ну и фиг с ним, тебе -то что ?


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

Зачем -- вот главный вопрос.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710117
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 31.07.2014 06:29, andrejk wrote:

> mysql_query("
> INSERT IGNORE INTO `ts`(`s`)
> VALUES ('" . $massiv_itog[$i] . "')");

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

Дай ПОЛНОСТЬЮ нормальный SQL-запрос, который ты выполняешь, а я тебе
может быть скажу, как свести к минимуму этот эффект.
Т.е. может дырки и будут, но не такие огромные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710135
Users
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkПросто получается очень огромные дырки будут, т. к. в бд постоянно будут попытки занести дубликат. И среди этих попыток, если появится слово новое, то у него будет уже огроменный индекс. Может тогда лучше переписать запрос, чтобы проверялось сначала наличие , а потом только вставлялось?

Конечно, может. select name from tbl_newvalue where name not in (select name from tbl_oldvalue)
Соответственно, отберутся только те записи, которых еще нет.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710147
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsersКонечно, может. select name from tbl_newvalue where name not in (select name from tbl_oldvalue)
Соответственно, отберутся только те записи, которых еще нет.Можно и так, но IN (SELECT ...) лучше переписать через JOIN.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710170
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivOn 31.07.2014 06:29, andrejk wrote:

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

Ну и фиг с ним, тебе -то что ?

А то.

MasterZiv> Как сделать так, чтобы пропуская уже существующее в таблице слово,
> первичный ключ не накручивался, а повышался только при записи именно
> нового слова?

Зачем -- вот главный вопрос.

Нада.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710179
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот этот запрос в коде ПХП. Получается, что ПК не данные считает, а колличество обращений к БД. Это у меня вызывает когнитивный диссонанс и становится неудобно жить ;-).

Код: 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.
<?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++) {
        //делаем повторяющуюся часть запроса
        mysql_query(" 
INSERT IGNORE 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');
?>
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710328
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил проблему через дополнительный проверочный запрос.

Код: 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');
?>
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710373
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkВот этот запрос в коде ПХП. Получается, что ПК не данные считает, а колличество обращений к БД. Это у меня вызывает когнитивный диссонанс и становится неудобно житьОсознайте, что ПК не должен "считать" ни "данные", ни "количество обращений к БД", что это просто ссылка на запись, и "диссонанс" исчезнет. Хотите считать количество строк или запросов, делайте соответствующие счётчики.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710466
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, не надо в моих словах искать глупость, я понимаю, что такое пк, но я не вижу смысла делать какие-то счётчики, если это можно сделать с помощью пк. Где ваше чувство рационального? Меня просто убивал тот факт, что пк реагирует на все шорохи и всё. По-моему, это было через жопу, просто так совпало, что это принцпиально не вредит.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710495
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkне надо в моих словах искать глупостьдействительно, зачем её искать, если её сразу видно?
andrejkМеня просто убивал тот факт, что пк реагирует на все шорохи и всё. По-моему, это было через жопуЧитать 5755138 , долго и вдумчиво.
Потом поразмыслить над следующей ситуацией:
есть таблица trololo (id int autoinc, val int)
выполняем (именно в таком порядке)
session1: begin
session2: begin
session1: insert into trololo (val) values (1)
session2: insert into trololo (val) values (2)
session1: rollback
session2: commit
и после этого думаем, как именно сервер должен извращаться, чтобы обеспечить отсутствие дыр.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710729
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня зацепил не факт наличия дыр, а причина их появления. В моём случае дыры будут тоже, если введённое слово, например «х.й», потом удалить (а таких слов будет куча: фвафывафы, 24352452, 7777777777, рорррррррррр…, — пока не набалуются).
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710868
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkдыры будут тоже, если введённое слово потом удалитьв чём вы видите принципиальную разницу между моим примером и вашим? :)
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710982
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejkдыры будут тоже, если введённое слово потом удалитьв чём вы видите принципиальную разницу между моим примером и вашим? :)

А где ваш пример?) Подозреваю, что это:

session1: begin
session2: begin
session1: insert into trololo (val) values (1)
session2: insert into trololo (val) values (2)
session1: rollback
session2: commit

Ну так я ещё слово begin не расшифровал, а остальное в общих чертах понял. Вы бы не могли эту последовательность перевести на нормальный язык или прокомментировать строчки?

session1: — это один запрос к БД?
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38710990
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkА где ваш пример?) Подозреваю, что это:

session1: begin
session2: begin
session1: insert into trololo (val) values (1)
session2: insert into trololo (val) values (2)
session1: rollback
session2: commit

Ну так я ещё слово begin не расшифровал, а остальное в общих чертах понял. Вы бы не могли эту последовательность перевести на нормальный язык или прокомментировать строчки?

session1: — это один запрос к БД?Ну это даже я понял :)
session1 и session2 - обозначение того, в какой MySQL-сессии выполняется запрос
Далее, собственно, сам запрос.
Слово begin начинает транзакцию. Полезно в тех случаях, когда включен автокоммит. После слова begin автокоммит в этой сессии выключается до завершения транзакции.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38711020
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
session1: begin — начал пользователь 1
session2: begin — начал пользователь 2
session1: insert into trololo (val) values (1) — запрос пользователя 1
session2: insert into trololo (val) values (2) — запрос пользователя 2
session1: rollback — пользователь 1 отменил транзакцию
session2: commit — а пользователь 2 подтвердил

Я правильно понял?

И, я так понимаю, сдесь речь идёт об одной общей таблице для всех пользователей, но у меня для каждого пользователя создаётся своя таблица.
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38711021
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejkдыры будут тоже, если введённое слово потом удалитьв чём вы видите принципиальную разницу между моим примером и вашим? :)

Да нет, я просто сначала вообще не понял, что вы мне написали)))
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при IGNORE.
    #38711025
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkно у меня для каждого пользователя создаётся своя таблица 13044537
всё, я пас
если кому-то интересно, убеждайте его сами
...
Рейтинг: 0 / 0
Пропуски в первичном ключе при 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
47 сообщений из 47, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пропуски в первичном ключе при IGNORE.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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