уникальный идентификатор в итерации

377
22 июня 2017, 04:11

Добрый день. Подскажите начинающему шаману как реализовать следующее.

Я делаю парсинг определенный контент и делю его на 4 части (id, theme, description, time). С тремя последними параметрами понятно и просто. Но, на данный момент у меня запись в базу данных организована плохо. Дословно:

<?php
    $i=$i+1;
    echo $el->title . PHP_EOL;
    echo "<br>";
    echo $el->description . PHP_EOL . PHP_EOL;
    echo "<br> <hr>";
    mysqli_query($link, "INSERT INTO cont SET typeid='".$i."', theme='".$el->title . ' ' . $el->description."', times=NOW()");
?>

В общем получается при каждом использовании данного кода я, во первых не перезаписываю данные (это не сложно сделать, но не разумно), а во вторых каждый раз копирую одинаковые данные, что мне не нужно.

В голове понимаю что нужно простенькое сравнение по id например. Но как в итерации сделать это не совсем понимаю.

Спасибо за советы!)

Answer 1

Шаг 1. Определитесь, исходя из своей задачи, какое поле является первичным ключем у этой таблицы. Заумная теория здесь. По-простому: первичный ключ - это значение, по которому можно точно определить строку, и другой такой в рамках таблицы больше нет и быть не может. Пример: номера квартир в одном подъезде, номера домов на одной улице, номер билета на трамвай в одном тираже. Человека определить однозначно сложнее - имена повторяются, полное ФИО повторяется, но например в рамках РФ для налоговой у нас есть ИНН, у каждого - свой.

Шаг 2. Проверьте, соответствует ли формат вашей таблицы SQL вашему представлению об этой этой таблице. По простому - верно ли она создана, указан ли первичный ключ (PRIMARY KEY), и есть ли у таблицы автоинкрементируемое поле.

Например, ваша таблица может выглядеть примерно так:

--
-- Структура таблицы `cont`
--
CREATE TABLE IF NOT EXISTS `cont` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `typeid` int(11) NOT NULL,
  `theme` text NOT NULL,
  `times` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Смотреть/править можно в консоли, но мне (и не только) больше нравится phpMyAdmin. Делать times обновляемым при каждом UPDATE не обязательно, это по умолчанию так вбито было ) не стал убирать, вдруг пригодится вам.

Обратите внимание на две вещи:

  • id AUTO_INCREMENT - это значит, что при INSERT без указания явного значения для id он просто будет взят +1 от последнего
  • PRIMARY KEY (id) - а это значит, что в рамках этой таблицы не может быть двух строк с одинаковыми значениями id

Шаг 3. Определитесь, в вашей итерации должна происходить всегда вставка INSERT новой строки в таблицу, или в некоторых случаях нужно делать UPDATE. Если всегда вставка - продолжайте делать только вставку. Если в некоторых случаях нужно обновить данные - делайте последовательно SELECT нужной записи по каким-то критериям, а затем если запись нашлась - делайте UPDATE с WHERE id нужной записи, обновляя именно ее, родимую

READ ALSO
SQL подсчёт количества связанных записей

SQL подсчёт количества связанных записей

Доброго времени суток! Использую СУБД MySQL в связке с PhpMyAdmin, при создании связей между таблицами появился вопрос: "Можно ли получить количество...

416
MySQL. Выборка записей [дубликат]

MySQL. Выборка записей [дубликат]

Данный вопрос уже был задан и имеет решение:

228
Смена кодировки MySQL с latin1 на UTF-8

Смена кодировки MySQL с latin1 на UTF-8

Развернут apache и MySQL на Ubuntu 1404LTS

223
как вставить новые данные в products_id где user_id = n

как вставить новые данные в products_id где user_id = n

нужно,что бы добавлялись новые id продукта у определенного пользователя

209