капец я наговнокодил. Этож надо было. PHP: <?php function _genKey() { $key = parent::_gen(); if(strlen($key) < 10) return self::_genKey(); else return $key; } вместо PHP: <?php function _genKey() { $str = null; for($i = 0; $i < 10; $i++) $str .= rand(0, 9); return $str; } КМП
PHP: <?php function randStr($num = 6){ $chars = array_merge(range('A', 'Z'), range('0', '9'),range('a', 'z')); shuffle($chars); $chars = array_flip($chars); return implode('', array_rand($chars, $num)); }
Padaboo PHP: <?php function newPass($num){ $s="qwertyuiopasdfghjklzxcvbnm"; $s .=strtoupper($s); $s .="0123456789"; $s .=$s.$s.$s; $s=str_shuffle($s); return substr($s,0,$num); }
PHP: <?php if(mb_strlen($cpu, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($memory, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($hdd, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($video, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($monitor, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($sound, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($keyboard, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($mouse, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($phone, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($os, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; if(mb_strlen($internet, 'UTF-8') > 100) $erno = 'Неверно заполнены поля'; Йа крутой)
PHP: <?php /** * Функция возвращает true, если данные в позиции $otkuda из строки $gde не взяты в одинарные кавычки * * @param string $gde Строка в которой происходит проверка * @param int $otkuda Позиция для которой происходит проверка * @return boolean Резултат проверки */ protected function notInQutes($gde,$otkuda){ $posQ2=-1; $posQ1=-1; while ($posQ1!==false){ $posQ1=strpos($gde,"'",$posQ2+1); //Находим открывающий апостроф $flag=true; $posQ=$posQ1; while ($flag and $posQ2!==false) { $posQ2=strpos($gde,"'",$posQ+1); //Находим закрывающий апостроф $posQ=strpos($gde,"'",$posQ2+1); //Находим символ экранирования //Если нашли не экранированный апостроф, то выходим из цикла if ($posQ!==$posQ2+1){ $flag=false; } } //Если нашли два апострофа if ($posQ1!==false && $posQ2!==false){ //Если позиция между апострофами if ($posQ1<=$otkuda && $otkuda<=$posQ2){ return false; } //Если первый апостроф правее позиции, значит все возможожные пары до этого уже проверены. if ($otkuda<$posQ1){ return true; } } } return true; }
[sql]CREATE PROCEDURE get_rands(IN cnt INT,_cat_id INT(11),_city_id INT(11),_table varchar(64)) BEGIN SET @Q = CONCAT('CREATE TEMPORARY TABLE ',_table,' ( rand_id INT )'); PREPARE stmt1 FROM @Q; EXECUTE stmt1; loop_me: LOOP IF cnt = 0 THEN LEAVE loop_me; END IF; set @q2 = CONCAT('INSERT INTO ', _table , ' SELECT `vip`.`product_id` FROM `vip` JOIN ( SELECT `vip_equi_dist`.`vip_id` FROM `vip_equi_dist` JOIN ( SELECT (RAND() * (SELECT MAX(`id`) FROM `vip_equi_dist`) ) AS row_id ) AS r2 WHERE `vip_equi_dist`.`id` >= r2.`row_id` ORDER BY `vip_equi_dist`.`id` ASC LIMIT 1) AS ROWS ON (id = vip_id) WHERE `vip`.`cat_id` =', _cat_id, ' AND `vip`.`city_id` = ', _city_id, ' AND `vip`.`time` > UNIX_TIMESTAMP()'); prepare stmt2 from @Q2; execute @Q2; SET cnt = cnt - 1; END LOOP loop_me; END//[/sql]
Padaboo Мне бы таких индусов которые такое пишут... Миллионером бы стал.... (попадаются чаще те кто даже такого не напишут...)
Vladson это типа оптимизация order by rand() долго с ней бился http://jan.kneschke.de/projects/mysql/order-by-rand/ сейчас буду теститьровать на паре тысячах позиций
Мда, наткнулся сегодня на хранение double в типе text. SELECT SUM() плачет кровавыми слезами. И вместо user id хранятся сразу логины. И тоже в text. Зато bool пишется как int(11). Индусы, мать их.
Нормальный подход ИМХО. В таблице комментов храним в поле логин непосредственно и поле с user_id (чтобы не потерять настоящего). Разгрузка весьма существенная, проверено на сайте новостной газеты Истонеи
Удобно, если система разрешает в равной степени идентифицировать пользователя по id, логину и e-mail. Когда они внутри системы на самом деле эквивалентны.
Лоховской подход То что быстрее - это да. Но то что система обростает ненужными зависимостями - это херово. А вдруг завтра понадобится сделать смену логина для юзера. Делать костыль изначальной проверки ИД, потом имя и потом колбаса выйдет, а не код. Считаю идентификацию юзера по его номеру - самый гуд. Хотя надо видеть конкретный случай.
Быстрее, согласен. Но тогда хотя бы и uid хранить, а не только логин. Ну и при смене данных юзверя тоже придется менять во всех таких местах.
Лоховский подход это если ты пишешь гостевую себе на сайт. Если посещаемость проекта до 300 000 в сутки, а на странице десятки интернациональных модулей, каждый из которых выёбывается своим "нелоховским подходом и знанием", то комфорта для пользователей ноль. Посетителю плевать, что база денормализирована - он оценивает общую схему и скорость работы сайта. И операция, которая выполняется в СОТНИ! и даже ТЫСЯЧИ раз реже, может и должна быть рассмотрена как частный случай. Выборка комментариев производится постоянно, обновление логина в профиле - это ЧАСТНЫЙ и очень РЕДКИЙ случай.
Apple Я прекрасно видел, что ты написал. И с этим, в общем, согласен. Я на программера сетую, который это писал.
Так же хочу добавить, что полтора месяца назад я тоже дрожал за джойны и красивый код. Но вышло так, что на работе мы разрабатываем не сферические проекты в вакууме, а абсолютно реальные и посещаемые веб-приложения, где нужно понимать не только как использовать джойны, но и как их НЕ использовать. Нужно понимать не только то, что мало запросов - это хорошо, но и то, когда много запросов может рассматриваться нормой.
Apple Ну я понял-понял, себе так делал, чтобы юзеры могли писать коменты как от гостей (name=aaa, ид тогда = 0), и как залогинившиеся (name=aaa, ид = 23232), чтобы отличить где Гость Апельсин, а где пап... настоящий зарегистрированный Апельсин. Но мне дублирование одной и той же инфы не пришлось по душе. Предпочел лишний запрос и "гибкость" кода, чем скорость. UPD. Не на свой счет прочитал ответ, но оставлю для копилки.