Секреты MySQL

На связи Mr. Spock

Сегодня капитан поручил мне разобраться с системой традиционных внутристанционных пятничных опросов. Капитан указал, что обязательно должно учитываться количество проголосовавших по каждой позиции опроса! Придется переделывать старую систему! В жизни вулканианца это сложная задача!


Простейшая система, которую я смог придумать, состояла в том, что существует таблица данных (polls_data) опросов, куда записывается идентификатор опроса ($pid), идентификатор позиции-выбора ($poll_vote_id) и собственно количество голосов ($num_votes).

Пришлось пойти на хитрость и подглядеть исходные коды новой системы детектирования целей, которую мы приобрели на Альдебаране. Система делала простую вещь – обнаруживала цель и увеличивала значение целевой переменной на единицу. Забыл добавить, что система работала на связке Codeigniter и MySQL.

Роясь в исходных кодах системы, я обнаружил метод добавления значения цели и переделал под свою задачу:

function updatePolls($pid, $poll_vote_id){
 $query = $this->db->get_where('polls_data', array('poll_id' => $pid, 'id' => $poll_vote_id),1);
 if ($query->num_rows() <= 0) return NULL;
 $result = $query->row();
 $new_num_votes = $result->num_votes + 1;
 $this->db->update('polls_data', array('num_votes' => $new_num_votes), array('poll_id' => $pid, 'id' => $poll_vote_id));
 return ;
}

Кратко поясню:
2 строка – получаем ряд из базы с идентификатором конкретного опроса и конкретной позиции в опросе;
3 строка – если ничего нет, возвращаем это все к Задоголовым!
4 и 5 строки – получаем старое значение количества голосов и прибавляем единицу;
6 строка – обновляем данные базы новым значением по старым идентификаторам
7 строка – возврат

Поздно вечером капитан подозвал меня к себе и попросил уменьшить число строк в исходном модуле программы – он был не в духе, так как рано вернулся от старшины Ренд. Он всегда не в духе, когда рано возвращается от нее. «К тому же завтра – пятница», – сообщил капитан, – «потрудитесь сделать до завтра!»

О! ВУЛКАНИАНЦЫ! У меня оставалось совсем мало времени, как Вселенский Разум подсказал мне, как сделать это быстро, качественно и уменьшить число строк до двух. А затем я сам уменьшил объем метода до одной строки. Теперь код выглядел так:

function updatePolls($pid, $poll_vote_id){
 return $this->db->query('UPDATE polls_data SET num_votes=num_votes+1 WHERE poll_id='.$pid.' AND id='.$poll_vote_id);
}

Вот так значительно лучше! Я воспользовался секретом MySQL – можно прибавлять любое число к ячейке (да хоть ко всей таблице), даже из другой ячейки! Это была мудрая мудрость, которую я хочу записать в Бортовом Журнале, чтобы в дальнейшем, если что, обратиться к этой тайне.

На ночь капитан Кирк захотел черный чай с лимоном. Знал бы он, что мы, вулканианцы, не выносим лимонной кислоты…

Метки: , ,

7 Ответов к “Секреты MySQL”

  1. Григорий Григорий поведал:

    Отличная статья! Не знал, что так можно. Спасибо, буду теперь использовать

  2. Trever Trever поведал:

    Thanks, Mr.Spock! :)

  3. Roger Roger поведал:

    +1

  4. Zackery Zackery поведал:

    сейчас проверю

  5. Solomon Solomon поведал:

    Не знал надо будет попробовать

  6. Silas Silas поведал:

    thanks!

  7. Kotov Kotov поведал:

    Мне очень нравится заметка, очень много полезной инфы. Запишу себе в память.

Говорить тут: