CodeIgniter: как проверить таблицу БД на наличие дубликатов перед вводом? - PullRequest
0 голосов
/ 08 февраля 2011

Я пишу небольшое приложение, которое будет записывать содержимое файла csv в базу данных в CodeIgniter, но у меня возникают трудности с проверкой на наличие ошибок перед записью. Поскольку это довольно распространенная задача, мне было интересно, как некоторые профессионалы (вы) это делают. Для контекста и сравнения, вот мой (в настоящее время нерабочий) код:

        $sql = "SELECT * FROM salesperson WHERE salesperson_name='" . $csvarray['salesperson_name'][$i] . "'";
        $already_exists = $this->db->query($sql); 

        if (sizeof($already_exists) > 0) {

            //add to database

        }

Любой ввод, если не считать "Вы отстой!" (Я уже слышал, что из моего собственного мозга два раза в час на этом этапе) будет очень признателен. Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

То, что вы делаете, будет работать, но, как указано выше, сравнение должно быть "== 0", а не "> 0".

Вы также можете использовать встроенный в метод num_rows CodeIgniters вместо sizeof, напримерИтак:

$sql = "your query";
$query = $this->db->query($sql);

if ($query->num_rows() == 0) {
  // no duplicates found, add new record
}

В качестве примечания: если вы используете CodeIgniter, то стоит использовать Active Record для построения ваших запросов вместо написания SQL.Вы можете узнать больше об этом здесь: CodeIgniter - Active Record

1 голос
/ 08 февраля 2011

Во-первых, вы, вероятно, хотите (а не> 0)

if (sizeof($already_exists) == 0) {
    //add to database
}

Также вы можете просто перенести все ваши данные во временную промежуточную таблицу, которую вы можете затем очистить с помощью некоторого элегантного sql-, а затем отодвинутьк вашему промежуточному столу.

Если вы хотите сделать ставку на вас, используя mysql (или тот, или postgres, если вы phping), вы можете попробовать это (взято с http://www.cyberciti.biz/faq/howto-removing-eliminating-duplicates-from-a-mysql-table/). Вам придется изменить свой .ID наваш первичный ключ

delete from salesperson_temptable 
    USING salesperson_temptable, salesperson_temptable as vtable
    WHERE (NOT salesperson_temptable.ID=vtable.ID)
        AND (salesperson_temptable.salesperson_name=vtable.salesperson_name)

, тогда, когда вы просматриваете содержимое salesperson_temptable, вы можете вставить его обратно в таблицу продавца

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...