- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
PHP-скрипт выполнил больше MySQL запросов чем нужно.
Есть таблица "md5" с полями id, str, md5.
CREATE TABLE `md5` (
`id` bigint(20) NOT NULL auto_increment,
`str` varchar(100) NOT NULL,
`md5` varchar(100) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Есть файл rus_eng.txt - список слов, всего строк в файле 194,775.
Скрипт выполняется без ошибок.
Смотрю через PhpMyAdmin количество строк в таблице md5 - 575,895.
А ведь должно быть 194,775.
может в файле есть пустые строки, в конце файла.
или вы несколько раз запускали скрипт
вам надо посмотреть в таблице какие поля одинаковые
**************************************************
ну такто принято на поля логин и пасворд(md5) назначать ключи уникальности
в зависимости от логики программы на одно поле или на пару полей
ALTER TABLE `md5` ADD UNIQUE `uniq1` (`str` ) - это на отдельное поле str
или
ALTER TABLE `md5` ADD UNIQUE `uniq2` (`str`, `md5` ) - это на пару полей
очищайте таблицу
TRUNCATE TABLE `md5`
ставте ключи и запускайте скрипт
тогда не сможете в таблицу записать одинаковые строки
PS
сейчас только заметил, поле id обычно назначается ключ Primary
инзерт должен будет выглядеть так
INSERT INTO md5 VALUES ('', '$str', '$md5')
или так
INSERT INTO md5 VALUES ('$str', '$md5')
******************
вот правильная таблица
CREATE TABLE `md5` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`str` VARCHAR( 100 ) NOT NULL ,
`md5` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`str`
)
);
Запрос
SELECT * FROM `md5` WHERE md5="1de32dfa1a9226786814f0acd35db2f7";
выдал
id str md5
8 F,CNHFRNYS[ 1de32dfa1a9226786814f0acd35db2f7
32008 F,CNHFRNYS[ 1de32dfa1a9226786814f0acd35db2f7
203060 F,CNHFRNYS[ 1de32dfa1a9226786814f0acd35db2f7
Выдало три дубля! Которых быть не должно.
srarwars добавил 14.08.2009 в 08:18
Удалил старую таблицу.
Сделал новую.
CREATE TABLE `md5` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`str` VARCHAR( 100 ) NOT NULL ,
`md5` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`str`
)
);
Запрос mysql_query("INSERT INTO md5 VALUES ('$str', '$md5')");
Добавило только одну строку.
И то неправильную.
id=1
str=iybrf
А в файле rus_eng.txt под 1 строкой FFFFF
srarwars добавил 14.08.2009 в 08:44
После неудачи делаю
DELETE FROM `md5`;
TRUNCATE `md5`;
srarwars добавил 14.08.2009 в 08:46
в файле rus_eng.txt строк 194, 775.
Значит и в таблице md5 должно быть столько же строк?
"INSERT INTO md5 ('str', 'md5') VALUES ('$str', '$md5')"Во-первых, зачем вы туда пытаетесь запихнуть id=0, если у вас в таблице id - auto_increment?
Во-вторых, зачем md5 тип varchar(100), когда md5 всегда отдает 32-значный ключ?
В-третих, зачем вам вообще поле md5, если у вас сама строка содержится в 'str', а md5 поле содержит всего лишь md5-хеш той же строки?
Читаем синтаксис INSERT и понимаем, почему SQL запрос вставил в 3 раза больше данных, чем Вам нужно.
Скрипту удалось добавить все строки из файла rus_eng.txt в таблицу md5.
Индексы:
Имя индекса Тип Количество элементов Действие Поле
PRIMARY PRIMARY 190903 Изменить Удалить id
uniq2 UNIQUE 190903 Изменить Удалить str, md5_str
SQL-запрос $query = mysql_query("INSERT INTO md5 VALUES (0, '$str', '$md5_str')");
Всё правильно, но!
Количество элементов в файле rus_eng.txt = 194,775
Количество элементов в таблице md5 = 190,903
Строка в файле rus_eng.txt под номером 194,775 такая z.zhahsi
Запрос SELECT * FROM `md5` WHERE id=194775;
выдал "MySQL вернула пустой результат (т.е. ноль строк)"
Запрос SELECT * FROM `md5` WHERE id=190903;
выдал 190903 z.zhahsi 41d4d29dc278979043c7c0399b3ae40f
То есть в файле и в таблице нумерация строк (поле id) разная.
srarwars добавил 14.08.2009 в 10:41
"INSERT INTO md5 ('str', 'md5') VALUES ('$str', '$md5')"Во-первых, зачем вы туда пытаетесь запихнуть id=0, если у вас в таблице id - auto_increment?
Во-вторых, зачем md5 тип varchar(100), когда md5 всегда отдает 32-значный ключ?
В-третих, зачем вам вообще поле md5, если у вас сама строка содержится в 'str', а md5 поле содержит всего лишь md5-хеш той же строки?
Читаем синтаксис INSERT и понимаем, почему SQL запрос вставил в 3 раза больше данных, чем Вам нужно.
>>>В-третих, зачем вам вообще поле md5, если у вас сама строка содержится в 'str', а md5 поле содержит всего лишь md5-хеш той же строки?
Пользователь вводит md5, скрипт запускает запрос "SELECT str FROM md5 WHERE md5_str=то, что ввёл пользователь".
>>>понимаем, почему SQL запрос вставил в 3 раза больше данных, чем Вам нужно.
не смог прочесть, всё на английском.
>>>В-третих, зачем вам вообще поле md5, если у вас сама строка содержится в 'str', а md5 поле содержит всего лишь md5-хеш той же строки?
Пользователь вводит md5, скрипт запускает запрос "SELECT str FROM md5 WHERE md5_str=то, что ввёл пользователь".
и никаких лишних полей в БД.
>>>понимаем, почему SQL запрос вставил в 3 раза больше данных, чем Вам нужно.
не смог прочесть, всё на английском.
На русском
На русском
Всё равно не понял.
Там не сказано, почему SQL запрос вставил в 3 раза больше данных, чем Вам нужно.
srarwars добавил 14.08.2009 в 20:53
Почему то добавление останавливается на отметке 166328 строка