Pages

Thursday, December 15, 2011

Triggers

 //After inserting the record

DROP TRIGGER IF EXISTS `fjm`.`updatePhtoVideoCountOnInsert`//
CREATE TRIGGER `fjm`.`updatePhtoVideoCountOnInsert` AFTER INSERT ON `fjm`.`fjm_files`
 FOR EACH ROW BEGIN
if NEW.modelName = 'listing' then
UPDATE fjm_listings b set photo_count = (SELECT COUNT(*)  FROM fjm_files l WHERE l.attachment_id = NEW.attachment_id  AND l.modelName = 'listing' GROUP BY l.attachment_id) WHERE b.id = NEW.attachment_id;
end if;
if NEW.modelName = 'listingvideos' then
UPDATE fjm_listings b set video_count = (SELECT COUNT(*)  FROM fjm_files l WHERE l.attachment_id = NEW.attachment_id  AND l.modelName = 'listingvideos' GROUP BY l.attachment_id) WHERE b.id = NEW.attachment_id;
end if;
END
//

//After update

DROP TRIGGER IF EXISTS `fjm`.`updatePhtoVideoCountOnUpdate`//
CREATE TRIGGER `fjm`.`updatePhtoVideoCountOnUpdate` AFTER UPDATE ON `fjm`.`fjm_files`
 FOR EACH ROW BEGIN
if NEW.modelName = 'listing' then
UPDATE fjm_listings b set photo_count = (SELECT COUNT(*)  FROM fjm_files l WHERE l.attachment_id = NEW.attachment_id  AND l.modelName = 'listing' GROUP BY l.attachment_id) WHERE b.id = NEW.attachment_id;
end if;
if NEW.modelName = 'listingvideos' then
UPDATE fjm_listings b set video_count = (SELECT COUNT(*)  FROM fjm_files l WHERE l.attachment_id = NEW.attachment_id  AND l.modelName = 'listingvideos' GROUP BY l.attachment_id) WHERE b.id = NEW.attachment_id;
end if;
END
//


//After delete
DROP TRIGGER IF EXISTS `fjm`.`updatePhtoVideoCountOnDelete`//
CREATE TRIGGER `fjm`.`updatePhtoVideoCountOnDelete` AFTER DELETE ON `fjm`.`fjm_files`
 FOR EACH ROW BEGIN
if OLD.modelName = 'listing' then
UPDATE fjm_listings b set photo_count = (SELECT COUNT(*)  FROM fjm_files l WHERE l.attachment_id = OLD.attachment_id  AND l.modelName = 'listing' GROUP BY l.attachment_id) WHERE b.id = OLD.attachment_id;
end if;
if OLD.modelName = 'listingvideos' then
UPDATE fjm_listings b set video_count = (SELECT COUNT(*)  FROM fjm_files l WHERE l.attachment_id = OLD.attachment_id  AND l.modelName = 'listingvideos' GROUP BY l.attachment_id) WHERE b.id = OLD.attachment_id;
end if;
END
//

Tuesday, December 13, 2011

zend Auth add more credential

   // Get our authentication adapter and check credentials
        $adapter = $this->_getAuthAdapter();
   
    //Need to add more credential for user
    $select = $adapter->getDbSelect();
        $select->where('status = 1 AND password is not null AND password!=""');
 $adapter->setIdentity($values['username']);
        $adapter->setCredential(md5($values['password']));

        $auth = Zend_Auth::getInstance();
        $result = $auth->authenticate($adapter);
        if ($result->isValid()) {
            $user = $adapter->getResultRowObject();
            $auth->getStorage()->write($user);
            return $this->_redirect('/sitemgr/pages');
        }



//or else we can use following simple code


$authAdapter->setTableName('register')
            ->setIdentityColumn('username')
            ->setCredentialColumn('pwd')
            ->setCredentialTreatment('? AND status = "active"');

Friday, December 2, 2011

Regular expression

[a-z] -> match any string
[a-z]+ -> strict match any string
^[a-z] -> srating  match any string
^[a-z]+ -> srating strict  match any string
^[a-z]? -> may be  match any string
a$  - end with a
^   - start
?
+
*   - all chars
.   - any single mchars
(join|update)

[^0-9] - not match 0 to 9
/d
/s
/S
::digits::


a$

Monday, November 21, 2011

Sample Triggers

DROP TRIGGER IF EXISTS `fjm`.`updateListingCountOnInsert`//

CREATE TRIGGER `fjm`.`updateListingCountOnInsert` AFTER INSERT ON `fjm`.`fjm_listings`
 FOR EACH ROW BEGIN

UPDATE fjm_classes b set listing_count = (SELECT COUNT(*)+0  FROM fjm_listings l WHERE l.status = 1 AND l.is_delete = 0 AND is_paid =1  AND b.id = l.class_id GROUP BY l.class_id);

UPDATE fjm_classes b set active_listing_count = (SELECT COUNT(*)+0  FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.class_id AND l.sold='0' GROUP BY l.class_id);

UPDATE fjm_states b set listing_count = (SELECT COUNT(*)+0  FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.state_id GROUP BY l.state_id);

UPDATE fjm_states b set active_listing_count = (SELECT COUNT(*)+0  FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.state_id AND l.sold='0' GROUP BY l.state_id);

UPDATE fjm_breeds_classes bc set bc.listing_count = (SELECT count( * )+0 FROM `fjm_listing_breeds` lb, fjm_listings l WHERE lb.listing_id = l.id AND bc.breed_id = lb.breed_id AND bc.class_id = l.class_id AND  l.status = 1 and l.is_paid = 1 and l.is_delete = 0 GROUP BY lb.breed_id, l.class_id);

UPDATE fjm_breeds b set b.listing_count = (SELECT COUNT(*)+0  FROM `fjm_listing_breeds` lb, fjm_listings l WHERE lb.listing_id = l.id AND b.id = lb.breed_id AND  l.status = 1 and l.is_paid = 1 and l.is_delete = 0 GROUP BY lb.breed_id);
END
//


DROP TRIGGER IF EXISTS `fjm`.`updateListingCountOnUpdate`//

CREATE TRIGGER `fjm`.`updateListingCountOnUpdate` AFTER UPDATE ON `fjm`.`fjm_listings`
 FOR EACH ROW BEGIN

UPDATE fjm_classes b set listing_count = (SELECT COUNT(*)  FROM fjm_listings l WHERE l.status = 1 AND l.is_delete = 0 AND is_paid =1  AND b.id = l.class_id GROUP BY l.class_id);

UPDATE fjm_classes b set active_listing_count = (SELECT COUNT(*)  FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.class_id AND l.sold='0' GROUP BY l.class_id);

UPDATE fjm_states b set listing_count = (SELECT COUNT(*)  FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.state_id GROUP BY l.state_id);

UPDATE fjm_states b set active_listing_count = (SELECT COUNT(*)  FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.state_id AND l.sold='0' GROUP BY l.state_id);

UPDATE fjm_breeds_classes bc set bc.listing_count = (SELECT COUNT(*)  FROM `fjm_listing_breeds` lb, fjm_listings l WHERE lb.listing_id = l.id AND bc.breed_id = lb.breed_id AND bc.class_id = l.class_id AND  l.status = 1 and l.is_paid = 1 and l.is_delete = 0 GROUP BY lb.breed_id, l.class_id);

UPDATE fjm_breeds b set b.listing_count = (SELECT COUNT(*)  FROM `fjm_listing_breeds` lb, fjm_listings l WHERE lb.listing_id = l.id AND b.id = lb.breed_id AND  l.status = 1 and l.is_paid = 1 and l.is_delete = 0 GROUP BY lb.breed_id);

update `fjm_listing_breeds` lb  set lb.status = 0 where lb.listing_id = NEW.id;

update `fjm_listing_breeds` lb  set lb.status = 1 where lb.listing_id = NEW.id and NEW.status= 1 and NEW.is_paid = 1 and NEW.is_delete = 0;
END
//




DROP TRIGGER IF EXISTS `fjm`.`updateListingCountOnDelete`//

CREATE TRIGGER `fjm`.`updateListingCountOnDelete` AFTER DELETE ON `fjm`.`fjm_listings`
 FOR EACH ROW BEGIN

UPDATE fjm_classes b set listing_count = (SELECT COUNT(*)+0  FROM fjm_listings l WHERE l.status = 1 AND l.is_delete = 0 AND is_paid =1  AND b.id = l.class_id GROUP BY l.class_id);

UPDATE fjm_classes b set active_listing_count = (SELECT COUNT(*)+0   FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.class_id AND l.sold='0' GROUP BY l.class_id);

UPDATE fjm_states b set listing_count = (SELECT COUNT(*)+0  FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.state_id GROUP BY l.state_id);

UPDATE fjm_states b set active_listing_count = (SELECT COUNT(*)+0  FROM fjm_listings l WHERE l.status = 1  AND l.is_delete = 0 AND is_paid =1  AND b.id = l.state_id AND l.sold='0' GROUP BY l.state_id);

UPDATE fjm_breeds_classes bc set bc.listing_count = (SELECT COUNT(*)+0  FROM `fjm_listing_breeds` lb, fjm_listings l WHERE lb.listing_id = l.id AND bc.breed_id = lb.breed_id AND bc.class_id = l.class_id AND  l.status = 1 and l.is_paid = 1 and l.is_delete = 0 GROUP BY lb.breed_id, l.class_id);

UPDATE fjm_breeds b set b.listing_count = (SELECT COUNT(*)+0  FROM `fjm_listing_breeds` lb, fjm_listings l WHERE lb.listing_id = l.id AND b.id = lb.breed_id AND  l.status = 1 and l.is_paid = 1 and l.is_delete = 0 GROUP BY lb.breed_id);
END
//

Thursday, November 10, 2011

Mysql DB Export via command prompt

C:\xampp\mysql\bin>mysqldump -uroot fjm  > test.sql

Mysql query optimization

Use "Explain" keyword to check the query runnning status
Ex: Explain select column_name from table_name where column_name = value


Wednesday, November 9, 2011

Zend Custom validation

Cutom validation in zend
--------------------------------
1. Requirement is i have two fields and validate two fields are not null, user want give atleast one value
Proceed following steps for zend custom validation
-----------------------------------------
step1:
create the name space at application.ini file for pointing the custom library folder
autoloadernamespaces[] = "ZC"
ZC - Is my custom folder name at Library

Step2:
Create file with following directory
Library/ZC/validate/HornPercent.php
HornPercent.php
--------------------
<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Validate
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 * @version    $Id: Identical.php 23775 2011-03-01 17:25:24Z ralph $
 */

/** @see Zend_Validate_Abstract */
require_once 'Zend/Validate/Abstract.php';

/**
 * @category   Zend
 * @package    Zend_Validate
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class ZC_Validate_HornPercent extends Zend_Validate_Abstract
{
    /**
     * Error codes
     * @const string
     */
    const SUM_EXCEED      = 'sumExceed';
    const SUM_LESS      = 'sumLess';

    /**
     * Error messages
     * @var array
     */
    protected $_messageTemplates = array(
        self::SUM_EXCEED      => "Sum of percetnage should not be grater than 100",
        self::SUM_LESS      => "Sum of percetnage should not be less than 100",
    );

    /**
     * @var array
     */
    protected $_messageVariables = array(
        'token' => '_tokenString'
    );

    /**
     * Original token against which to validate
     * @var string
     */
    protected $_tokenString;
    protected $_token;
    protected $_strict = true;

    /**
     * Sets validator options
     *
     * @param  mixed $token
     * @return void
     */
    public function __construct($token = null)
    {
        if ($token instanceof Zend_Config) {
            $token = $token->toArray();
        }

        if (is_array($token) && array_key_exists('token', $token)) {

            $this->setToken($token['token']);
        } else if (null !== $token) {
            $this->setToken($token);
        }
    }

    /**
     * Retrieve token
     *
     * @return string
     */
    public function getToken()
    {
        return $this->_token;
    }

    /**
     * Set token against which to compare
     *
     * @param  mixed $token
     * @return Zend_Validate_Identical
     */
    public function setToken($token)
    {
        $this->_tokenString = (string) $token;
        $this->_token       = $token;
        return $this;
    }


    /**
     * Defined by Zend_Validate_Interface
     *
     * Returns true if and only if a token has been set and the provided value
     * matches that token.
     *
     * @param  mixed $value
     * @param  array $context
     * @return boolean
     */
    public function isValid($value)
    {
        if(is_array($value)){
            $total = 0;
            foreach($value as $key => $valArr){
                $total += $valArr['percent'];
            }
        }
        if($total> 100){
            $this->_error(self::SUM_EXCEED);
            return false;
        }
        if($total < 100){
            $this->_error(self::SUM_LESS);
            return false;
        }       
        return true;
    }
}
-----------------------------------------------
Step 3:
Add following lies to zend form init function
$this->addElementPrefixPath('ZC_Validate',
                                    'ZC/Validate/',
                                    'validate');

step 4:
Add following validator for element
$this->getElement('horns')->setAllowEmpty(false)->addValidator('HornPercent', false, array('token' => 'horn_percent'));   


Mysql update table comparing with another table

update `fjm_listings` a, fjm_zipcodes b set a.search_title = if(b.zipcode_abbr = '',  CONCAT(trim(replace(replace(a.title, a.class_name, ''), '<br>', '')),'<br>', a.class_name,  ' ', b.state_abbr),
CONCAT(trim(replace(replace(a.title, a.class_name, ''), '<br>', '')), '<br>', a.class_name, ' ', b.zipcode_abbr, ' ', b.state_abbr)) where a.zipcode = b.zipcode

Friday, September 16, 2011

sample stored procedure and function

Tutorial -1

1. Sample procedure to updating the record


CREATE DEFINER=`root`@`localhost` PROCEDURE `archive_affiliate_user`(
 IN `affilaite_id_csv` LONGTEXT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
 
BEGIN

SET @s1 = CONCAT('UPDATE affiliates set isactive= ''0'', modified_on = NOW() 
WHERE affiliate_id IN(',"'",REPLACE(affilaite_id_csv,',',"','"),"')");
 
 PREPARE stmt1 FROM @s1;
EXECUTE stmt1;
 
 SET @s2 = CONCAT("UPDATE users SET isactive= '0', modified_on = NOW() 
WHERE user_id IN (SELECT user_id FROM user_affiliates 
WHERE affiliate_id IN('",REPLACE(affilaite_id_csv,',',"','"),"'))");
 
 PREPARE stmt2 FROM @s2;
EXECUTE stmt2;
COMMIT;
SELECT @s2;
END

 
2. Creating temporary table to write the join query


CREATE DEFINER=`root`@`localhost` PROCEDURE `reports`(

 IN `p_usr_id` VARCHAR(50), IN `role_id` VARCHAR(50),
 IN `p_mailing_filter` VARCHAR(50),  IN `p_template_filter` VARCHAR(50),
 IN `p_filters` VARCHAR(50), 

 IN `p_aff` VARCHAR(50),  IN `p_tmp` VARCHAR(50),  IN `p_usr` VARCHAR(50),
 IN `frm_date` VARCHAR(50),  IN `to_date` VARCHAR(50),
 IN `p_limit` VARCHAR(50), IN `sort` VARCHAR(50),
 IN `page` VARCHAR(50)

)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''



BEGIN
#------------------Local Variables Declaration-------------------------
DECLARE v_aff,v_tmp,v_usr,v_fdate,v_tdate,v_role_id,v_mailing_filter,v_template_filter,v_limit,v_sort,v_all_filters varchar(250) default '';
DECLARE v_cnt int(11) default 0;
DECLARE v_frdate varchar(10) default DATE_SUB(CURDATE(), INTERVAL 6 DAY);
DECLARE v_todate varchar(10) default CURDATE();

#-----------------Drop temporary tables before creation----------------
DROP TABLE IF EXISTS camp_users;
DROP TABLE IF EXISTS issue_events;

#-----------------Create Temporary Tables------------------------------
CREATE TEMPORARY TABLE camp_users (
campaign_id INT(11) NOT NULL DEFAULT '0',
mailing_status ENUM('w','r','a') NOT NULL DEFAULT 'w' ,
affiliate_name VARCHAR(50) NOT NULL,
campaign_name VARCHAR(150) NOT NULL,
template_id INT(11) NOT NULL,
template_name VARCHAR(150) NOT NULL,
time_sent DATETIME NOT NULL,
affiliate_id INT(15) NOT NULL,
recipients_count INT(11) UNSIGNED NOT NULL DEFAULT '0',
suppressed INT(11) NULL DEFAULT NULL,
user_id INT(11) NOT NULL DEFAULT '0',
user_name VARCHAR(50) NOT NULL,
INDEX campaign_id (campaign_id),
INDEX template_id (template_id),
INDEX affiliate_id (affiliate_id),
INDEX user_id (user_id)
);

CREATE TEMPORARY TABLE issue_events (
campaign_id INT(11) NULL DEFAULT NULL,
issue_id VARCHAR(15) NOT NULL,
issue_id_pk INT(11) NOT NULL DEFAULT '0',
unsubscribes INT(11) NULL DEFAULT NULL,
opens INT(11) NULL DEFAULT NULL,
sends BIGINT(21) NOT NULL DEFAULT '0',
received BIGINT(21) NULL DEFAULT NULL,
bounces BIGINT(21) NULL DEFAULT NULL,
time_sent DATETIME NOT NULL,
INDEX campaign_id (campaign_id)
);

#---------------Additional Filters------------------------

if p_filters <> '' then

if p_aff <> '' then
set v_aff = concat(" AND d.affiliate_id=",p_aff);
end if;

if p_tmp <> '' then
set v_tmp = concat(" AND d.template_id=",p_tmp);
end if;

if p_usr <> '' then
set v_usr = concat(" AND d.user_id=",p_usr);
end if;

end if;

#----------------Date boundaries---------------------------

if frm_date <> '' then
set v_fdate = frm_date;
else
set v_fdate  = v_frdate;
end if;

if to_date <> '' then
set v_tdate = to_date;
else
set v_tdate = v_todate;
end if;

#------------------role restrictions----------------------

if role_id = '3' then
set v_usr = concat(" AND d.user_id=",p_usr_id);
end if;

if role_id = '2' then

if INSTR(p_filters,'U') = 0 then
set v_usr = '';
end if;

set v_role_id = concat(" AND d.affiliate_id IN (
     SELECT affiliate_id FROM user_affiliates

     WHERE user_id =",p_usr_id," AND role_id = '2'
   )");
else
set v_role_id = "";
end if;

#--------------mailing filter------------------------------

if p_mailing_filter <> '' then
set v_mailing_filter = concat(" AND d.campaign_name LIKE '%",p_mailing_filter,"%'");
end if;

#--------------template filter------------------------------

if p_template_filter <> '' then
set v_template_filter = concat(" AND d.template_name LIKE '%",p_template_filter,"%'");
end if;

#--------------limit----------------------------------------
if p_limit <> '' then
set v_limit = concat(" limit ",p_limit,", 20");
end if;

#--------------sort by---------------------------------------
if sort <> '' then
set v_sort = concat(' order by ',sort);
end if;



#---------------Data insertion in temporary tables------------
insert into camp_users select `c`.`campaign_id` AS `campaign_id`,`c`.`mailing_status` AS `mailing_status`,
`a`.`affiliate_name` AS `affiliate_name`,
`c`.`campaign_name` AS `campaign_name`,

`c`.`template_id` AS `template_id`,`t`.`template_name` AS `template_name`,
`c`.`time_sent` AS `time_sent`,`c`.`affiliate_id` AS `affiliate_id`,`c`.`recipients_count` AS `recipients_count`,

(select count(suppressed_id) from suppressed
    where campaign_id=c.campaign_id) suppressed,
   `u`.`user_id` AS `user_id`,
   `u`.`user_name` AS `user_name`     from ((
            (`campaigns` `c` join `users` `u` on(
               (`c`.`user_id` = `u`.`user_id`)))
               join `affiliates` `a` on(
                (`c`.`affiliate_id` = `a`.`affiliate_id`))
            ) join `templates` `t` on((`c`.`template_id` = `t`.`template_id`)))
                where (`c`.`mailing_status` = 'a') and date(c.time_sent) between v_fdate and v_tdate;


insert into issue_events select i.campaign_id,i.issue_id,i.issue_id_pk,
(select count(issue_id) from events where issue_id=e.issue_id and event_type=50) unsubscribes,
(select count(issue_id) from events where issue_id=e.issue_id and event_type=10) opens,
 COUNT(e.event_id) sends,(select count(issue_id) from events
     where issue_id=e.issue_id and event_type=2 and resultcode='R') received,
(select count(issue_id) from events where issue_id=e.issue_id and event_type=2 and
(resultcode='S' or resultcode='T')) bounces,
i.time_sent from events e,issues i where i.issue_id_pk=e.issue_id and e.event_type = 2 and
date(i.time_sent) between v_fdate and v_tdate
   group by e.issue_id;

#---------------Dynamic Query----------------------------------

SET v_all_filters = concat(v_usr,v_tmp,v_aff,v_role_id,v_mailing_filter,v_template_filter);
SET v_all_filters = substr(v_all_filters ,instr(v_all_filters,"and")+3);

if v_all_filters <> "" then
SET v_all_filters = concat(" where ",v_all_filters);
end if;

if page = 'L' then
SET @s1 = CONCAT(
"SELECT d.campaign_id, `d`.`affiliate_name`, `d`.`campaign_name`, `d`.`template_id`, `d`.`template_name`,
`d`.`time_sent`, `d`.`affiliate_id`, `i`.`issue_id`,
 if(`i`.`sends` IS NULL,`d`.`recipients_count`,`i`.`sends`) recipients_count,IFNULL(`i`.`sends`,0) sends,
IFNULL(`i`.`bounces`,'0') bounces, `d`.`suppressed` , `i`.`received` ,
`d`.`user_id`, `d`.`user_name` from camp_users d
LEFT JOIN `issue_events` i ON `d`.`campaign_id`=`i`.`campaign_id` ",v_all_filters,"  GROUP BY `d`.`campaign_id`",v_sort,v_limit
);
elseif page = 'T' then # For Template Listing Report
SET @s1 = CONCAT(
"SELECT d.campaign_id, `d`.`affiliate_name`, `d`.`campaign_name`, `d`.`template_id`, `d`.`template_name`,
`d`.`affiliate_id`, `i`.`issue_id`,`d`.`time_sent`,
    if(`i`.`sends` IS NULL,`d`.`recipients_count`,`i`.`sends`) recipients_count,IFNULL(`i`.`sends`,0) sends,
    IFNULL(`i`.`bounces`,'0') bounces, i.opens, `d`.`suppressed` ,
    IFNULL(`i`.`unsubscribes`,'0') unsubscribes, `i`.`received` ,
    `d`.`user_id`, `d`.`user_name` from camp_users d LEFT JOIN `issue_events` i ON `d`.`campaign_id`=`i`.`campaign_id` ",
    v_all_filters,"  GROUP BY `d`.`campaign_id`",v_sort,v_limit
);
elseif page = 'F' then # For Franchise Listing Report
SET @s1 = CONCAT(
"SELECT d.campaign_id, `d`.`campaign_name`, `d`.`template_id`, `d`.`template_name`,
`d`.`time_sent`, `i`.`issue_id`,
    if(`i`.`sends` IS NULL,`d`.`recipients_count`,`i`.`sends`) recipients_count,IFNULL(`i`.`sends`,0) sends,
IFNULL(`i`.`bounces`,'0') bounces, i.opens,  `d`.`suppressed` , IFNULL(`i`.`unsubscribes`,'0') unsubscribes, `i`.`received` ,
`d`.`user_id`, `d`.`user_name` from camp_users d LEFT JOIN `issue_events` i ON `d`.`campaign_id`=`i`.`campaign_id` ",
v_all_filters,"  GROUP BY `d`.`campaign_id`",v_sort,v_limit
);
end if;

PREPARE stmt1 FROM @s1;
EXECUTE stmt1;


END
 
3. Sample Function

CREATE DEFINER=`root`@`localhost` FUNCTION `checking_franchise_criteria`(`p_affiliate_id` int, `p_user_id` INT, `recep_count` int)
RETURNS int(11)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
/*
tcnt - used to check having entry in security settings table
temp_count - used to check any campaign is made before.
cntone - used to get count from security settings table of filter type 'U'
cnttwo - used to get count from security settings table of filter type 'F'
max_hour - No of maximum mails per hour threshold in security settings table
max_day  - No of maximum mails per day threshold in security settings table
max_list - No of maximum mails per list threshold in security settings table
max_hour_sent - sum of mails already send per hour
max_day_sent  - sum of mails already send per day
new_hour - differences of max_hour,max_hour_sent
new_day -  differences of max_day,max_day_sent
rtn_value - holds return value
*/
declare tcnt int default 0;
declare cntone,cnttwo,max_hour,max_day,max_list,max_hour_sent,max_day_sent,
    new_hour,new_day,temp_count,rtn_value int default 0;
select count(campaign_id) into temp_count from campaigns where affiliate_id=p_affiliate_id   
    and 0 = abs(datediff(curdate(),time_sent));
select count(security_id) into tcnt from security_settings where affiliate_id=p_affiliate_id;

if tcnt = 0 then
    return 2;
elseif tcnt > 0 then
    select count(security_id) into cntone from security_settings where affiliate_id=p_affiliate_id and filter_type='U';
  select count(security_id) into cnttwo from security_settings where affiliate_id=p_affiliate_id and filter_type='F';
  if cntone>0 then
    select max_sends_hour,max_sends_day,max_list_size into max_hour,max_day,max_list
        from security_settings where affiliate_id=p_affiliate_id and filter_type='U';
    select sum(recipients_count) into max_hour_sent from campaigns where affiliate_id=p_affiliate_id and
        user_id=p_user_id and 1 > hour(timediff(time(time_sent),curtime()))
        and 0 = abs(datediff(curdate(),time_sent))  and mailing_status='a';
    select sum(recipients_count) into max_day_sent from campaigns where affiliate_id=p_affiliate_id
        and user_id=p_user_id and 0 = abs(datediff(curdate(),time_sent)) and mailing_status='a';
    if isnull(max_hour_sent) then
        set max_hour_sent = 0;
    end if;
  
    if isnull(max_day_sent) then
        set max_day_sent = 0;
    end if;
  
    if max_hour > 0 then
      set new_hour = (max_hour - max_hour_sent);
      if recep_count > new_hour then
         return 1;
      end if;
    end if;
  
    if max_day > 0 then
      set new_day = (max_day - max_day_sent);
      if recep_count > new_day then
         return 1;
      end if;
    end if;
 
    if max_list > 0 and recep_count > max_list then
       return 1;
    end if;
 
    if max_hour>0 or max_day>0 or max_list>0 then
            set rtn_value = 0;
    else
            return 1;
    end if;
  end if;
 
  if cnttwo>0 and rtn_value = 0 then
 
    select max_sends_hour,max_sends_day,max_list_size into max_hour,max_day,
        max_list from security_settings where affiliate_id=p_affiliate_id and filter_type='F';
    select sum(recipients_count) into max_hour_sent from campaigns
        where affiliate_id=p_affiliate_id  and 1 > hour(timediff(time(time_sent),curtime()))
            and 0 = abs(datediff(curdate(),time_sent)) and mailing_status='a';
    select sum(recipients_count) into max_day_sent from campaigns   
        where affiliate_id=p_affiliate_id  and 0 = abs(datediff(curdate(),time_sent)) and mailing_status='a';
    if isnull(max_hour_sent) then
              set max_hour_sent = 0;
    end if;
  
    if isnull(max_day_sent) then
              set max_day_sent = 0;
    end if;
  
    if max_hour > 0 then
       set new_hour = (max_hour - max_hour_sent);
       if recep_count > new_hour then
           return 1;
       end if;
    end if;
  
    if max_day > 0 then
      set new_day = (max_day - max_day_sent);
      if recep_count > new_day then
         return 1;
      end if;
    end if;
  
    if max_list > 0 and recep_count > max_list then
        return 1;
    end if;
    if max_hour>0 or max_day>0 or max_list>0 then
             return 0;
    else
             return 1;
    end if;
  end if;
 
  if temp_count=0 then
    return 0;
  end if;
end if;
return rtn_value;

END
--------------------------------
Tutorial -11

Procedure for DB search

DROP PROCEDURE IF EXISTS test_v2.sp_testTeam_member_search;

CREATE PROCEDURE test_v2.`sp_testTeam_member_search`(

  pmTotalRecords INTEGER,
  pmCurPage INTEGER,
  pmNoOfRecords INTEGER,
  pmLoginUserId INTEGER,
  pmUserId TEXT,
  pmtestTeamId TEXT,
  pmSortflag TINYINT

  )

    READS SQL DATA
sp_testTeam_member_search:

BEGIN

  DECLARE vCurPage            INTEGER;
  DECLARE vCQuery                TEXT;
  DECLARE vSql                    TEXT  DEFAULT '';
  DECLARE vMemberSql      TEXT  DEFAULT '';
  DECLARE vtestTeamSql        TEXT  DEFAULT '';
  DECLARE EXIT HANDLER FOR SQLEXCEPTION

        BEGIN

      INSERT INTO test_error_log(erlg_object_name,erlg_sqlstate,erlg_error_code,erlg_error_desc,erlg_createdate,  erlg_status)

        VALUES ('SP_testTeam_MEMBER_SEARCH', 'UNKNOWN_SQL_STATE','-99', 'UNEXPECTED_SQL_EXCEPTION',CURRENT_TIMESTAMP,1);

            SELECT  -99 Result,NULL MemberId,NULL Member_Fname,NULL Member_Lname,NULL testTeam_Id,NULL testTeam_Description,NULL Type;

         END;

    /******************* Input Parameters ***************************

    Input:

        pmTotalRecords  - Total Records
    pmCurPage       - Current Page
    pmNoOfRecords   - No of Records to List
    pmLoginUserId   - Logged In UserId
    pmUserId        - Multiple UserId with comma separator
    pmtestTeamId        - Multiple testTeamId with comma separator
    pmSortflag      - Sort Flag(1-testTeam Name (A-Z) 2- testTeam Name (Z-A) 3- Sport (A-Z) 4-Sport (Z-A) 5-City/Town (A-Z) 6-City/Town (Z-A) 7-testTeam Status (Active First))

    Output:

    Result,
    MemberId,
    Member_Fname,
    Member_Lname,
    ZipCode,
    City,
    testTeam_Id,
    testTeam_Logo,
    testTeam_Description,
    testTeam_Status,
    testTeam_amazon_status,
    Sport_Name,
    testTeam URL

    Player_Flag - [0- Not a Player,1- Player,3- Invited]
    Friend_Flag - [0- Not a Friend,1- Friend,3- Awaiting for confirmation] 
    Type    - [1- Member,2- testTeam]
  Version 1.0  ****************************************************************************/  

  IF(pmCurPage<0) OR (pmCurPage IS NULL) OR (pmNoOfRecords<=0) OR (pmNoOfRecords IS NULL) THEN

    INSERT INTO test_error_log(erlg_object_name,erlg_sqlstate,erlg_error_code,erlg_error_desc,erlg_createdate,  erlg_status)

        VALUES ('SP_testTeam_MEMBER_SEARCH', 'UNKNOWN_SQL_STATE','-98', 'INVALID_INPUT',CURRENT_TIMESTAMP,1);

      SELECT -98 Result,NULL MemberId,NULL Member_Fname,NULL Member_Lname,NULL testTeam_Id,NULL testTeam_Description,NULL Player_Flag,NULL Friend_Flag,NULL Type;

      LEAVE sp_testTeam_member_search;

    END IF;

  SET @vRecordCount        :=0;
    SET @vTotalPages        :=0;
    SET vCurPage                :=pmCurPage;

    IF(vCurPage=1 OR vCurPage=0)THEN

        SET vCurPage := 0;
        SET @vRowNum := 0;

    ELSE

        SET @vRowNum := (vCurPage-1)*pmNoOfRecords;
        SET vCurPage = (vCurPage*pmNoOfRecords)-pmNoOfRecords;

    END IF; 


  SET vCQuery := " SELECT COUNT(1) INTO @vRecordCount FROM ( ";
  SET vSql := " SELECT DISTINCT 1 Result, T.* FROM ( ";
  SET vMemberSql :=
    CONCAT
    (
    "
    SELECT

      @vRecordCount     Total_Records,
      user.user_id      MemberId,
      user.user_fname   Member_Fname,
      user.user_lname   Member_Lname,
      user.user_zipcode Zipcode,
      user.user_city    City,
      NULL              testTeam_Id,
      NULL              testTeam_Logo,
      NULL              testTeam_Description,
      NULL              testTeam_Status,
      NULL              testTeam_amazon_status,
      NULL              Sport_Name,
      NULL              testTeam_URL,
      0                 Player_Flag,

      IF(LENGTH(",pmLoginUserId," )>0,fun_friend_req_status(",pmLoginUserId,",user.user_id),0) Friend_Flag,
      1                 Type

    FROM

      test_users user

    WHERE
      user.user_status=1 AND user.user_type!=2 AND FIND_IN_SET(user_id,'",pmUserId,"')"
    );



  SET vtestTeamSql :=
    CONCAT
    (
    "
    SELECT
      @vRecordCount     Total_Records, 
      NULL MemberId,
      NULL Member_Fname,
      NULL Member_Lname,
      testTeam.testTeam_zipcode Zipcode,
      CONCAT(testTeam.testTeam_city,', ',stat_abb,' ',testTeam.testTeam_zipcode) City,
      testTeam_id testTeam_Id,
      testTeam_logo testTeam_Logo,
      testTeam_name testTeam_Description,
      testTeam.testTeam_status testTeam_Status,
      testTeam.testTeam_amazon_status testTeam_Amazon_Status,
      sprt.sprt_name  Sport_Name,
      rutr_url testTeam_URL,
      0 Player_Flag,
      0 Friend_Flag,
      2 Type
    FROM

      test_testTeam testTeam

      INNER JOIN test_router rutr ON rutr.rutr_id=testTeam.testTeam_rutr_id
      INNER JOIN test_sport sprt ON sprt.sprt_id=testTeam.testTeam_sprt_id
      INNER JOIN test_states stat ON stat.stat_id=testTeam_stat_id
    WHERE

      testTeam.team_status=1 AND rutr.rutr_status=1 AND stat.stat_status AND sprt_status=1 AND FIND_IN_SET(team_id,'",pmtestTeamId,"')"
   );



  IF pmUserId IS NOT NULL AND LENGTH(pmUserId)>0 AND (pmtestTeamId IS NULL OR pmtestTeamId='')THEN

    SET @vSql := CONCAT(vSql,vMemberSql,')T ');

  ELSEIF pmtestTeamId IS NOT NULL AND LENGTH(pmtestTeamId)>0 AND (pmUserId IS NULL OR pmUserId='')THEN

    SET @vSql := CONCAT(vSql,vtestTeamSql,')T ');

  

    CASE pmSortflag

    WHEN 1 THEN
      SET @vSql := CONCAT(@vSql,' ORDER BY testTeam_Description ');
    WHEN 2 THEN
      SET @vSql := CONCAT(@vSql,' ORDER BY testTeam_Description DESC ');
    WHEN 3 THEN
      SET @vSql := CONCAT(@vSql,' ORDER BY Sport_Name ');
    WHEN 4 THEN
      SET @vSql := CONCAT(@vSql,' ORDER BY Sport_Name DESC ');
    WHEN 5 THEN
      SET @vSql := CONCAT(@vSql,' ORDER BY City ');
    WHEN 6 THEN
      SET @vSql := CONCAT(@vSql,' ORDER BY City DESC ');
    WHEN 7 THEN
      SET @vSql := CONCAT(@vSql,' ORDER BY testTeam_Status ');
    ELSE
      BEGIN
      END;

  END CASE;

  ELSEIF pmtestTeamId IS NOT NULL AND LENGTH(pmtestTeamId)>0 AND pmUserId IS NOT NULL AND LENGTH(pmUserId)>0 THEN

    SET @vSql := CONCAT(vSql,vMemberSql,' UNION ALL ',vtestTeamSql,')T ORDER BY Type DESC');

  END IF;

 


  SET @vCQuery:= CONCAT(vCQuery,@vSql,')AS T');      

  IF(pmTotalRecords=0)OR(pmTotalRecords IS NULL) THEN
    PREPARE vCountQuery FROM @vCQuery;
    EXECUTE vCountQuery;
    DEALLOCATE PREPARE vCountQuery;

  ELSE
    SET @vRecordCount:=pmTotalRecords;
  END IF;         

  IF(@vRecordCount=0)OR((CEIL(@vRecordCount/pmNoOfRecords))<pmCurPage)THEN

    SELECT 0 Result,NULL MemberId,NULL Member_Fname,NULL Member_Lname,NULL testTeam_Id,NULL testTeam_Description,NULL Type;

    LEAVE sp_testTeam_member_search;

  END IF;
  

  SET @vTotalPages := CEIL(@vRecordCount/pmNoOfRecords);
  SET @vSql:=CONCAT(@vSql,' LIMIT ',vCurPage,',',pmNoOfRecords);

    
  PREPARE vQuery FROM @vSql;
  EXECUTE vQuery;
  DEALLOCATE PREPARE vQuery;
    

END sp_testTeam_member_search;

------------------------------------------------------------------------

------------------------------------------------------------------------

------------------------------------------------------------------------

supported function :: fun_friend_req_status

------------------------------------------------------------------------

DROP FUNCTION IF EXISTS test_v2.fun_friend_req_status;

CREATE FUNCTION test_v2.`fun_friend_req_status`(pmUserId INTEGER,pmFriendUserId INTEGER) RETURNS int(11)

    READS SQL DATA
    DETERMINISTIC

fun_friend_req_status:

BEGIN

  DECLARE vStatus INTEGER DEFAULT 0;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
  BEGIN
    SET vStatus := 0;
  END;

    DECLARE EXIT HANDLER FOR SQLEXCEPTION

    BEGIN

    INSERT INTO test_error_log(erlg_object_name,erlg_sqlstate,erlg_error_code,erlg_error_desc,erlg_createdate,  erlg_status)

      VALUES ('FUN_FRIEND_REQ_STATUS', 'UNKNOWN_SQL_STATE','-99', 'UNEXPECTED_SQL_EXCEPTION',CURRENT_TIMESTAMP,1);

    RETURN -99;

     END;   

    /******************* Input Parameters ***************************

  Author: Rathinsamy

    Input:

        pmUserId              :    UserId

    pmFriendUserId  : Friend UserId

    Output:

    0- Not a Friend,

    1- Friend,

    3- Awaiting for Confirmation

    Version 1.0      

    ********************************************************************************/  



  --

  SELECT 

    rlsp_status

  INTO

    vStatus

  FROM

    test_relationships

  WHERE

    rlsp_status IN (1,3)

    AND rlsp_rsty_id=6

    AND
    (
      (rlsp_user_id = pmUserId and rlsp_relation_user_id=pmFriendUserId)
      OR
      (rlsp_user_id = pmFriendUserId and rlsp_relation_user_id=pmUserId)
    )

    LIMIT 1;

  RETURN vStatus;
END fun_friend_req_status;