Amiro.CMS API Reference
Amiro.Ru / Manual
Loading search...

DB_Query usage example

  • <?php
  • /**
  •  * DB query constructor usage example.
  •  *
  •  * Let we record own simple site visit statistic and we have following structures/data:
  •  * <pre>
  •  * CREATE TABLE `user` (
  •  *     `id` int(10) unsigned NOT NULL,
  •  *     `name` varchar(255) NOT NULL,
  •  *     PRIMARY KEY (`id`)
  •  * );
  •  * INSERT INTO `user` VALUES (1,'Tom');
  •  * INSERT INTO `user` VALUES (2,'Soap');
  •  * INSERT INTO `user` VALUES (3,'Eddy');
  •  * INSERT INTO `user` VALUES (4,'Bacon');
  •  *
  •  * CREATE TABLE `page` (
  •  *     `id` int(10) unsigned NOT NULL,
  •  *     `url` varchar(255) NOT NULL,
  •  *     PRIMARY KEY (`id`)
  •  * );
  •  * INSERT INTO `page` VALUES (1,'/');
  •  * INSERT INTO `page` VALUES (2,'/poker');
  •  *
  •  * CREATE TABLE `visit` (
  •  *     `id` int(10) unsigned NOT NULL,
  •  *     `date` datetime NOT NULL,
  •  *     `id_user` int(11) unsigned NOT NULL,
  •  *     `id_page` int(11) unsigned NOT NULL,
  •  *     `ip` int(11) unsigned NOT NULL COMMENT 'INET_NTOA() / INET_ATON()',
  •  *     PRIMARY KEY (`id`)
  •  * );
  •  * INSERT INTO `visit` VALUES (1,'1998-09-27 17:44:52',1,1,3232235521);
  •  * INSERT INTO `visit` VALUES (2,'1998-09-27 17:45:54',2,1,3232235522);
  •  * INSERT INTO `visit` VALUES (3,'1998-09-27 15:23:38',3,1,3232235523);
  •  * INSERT INTO `visit` VALUES (4,'1998-09-27 15:25:38',4,1,3232235524);
  •  * INSERT INTO `visit` VALUES (5,'1998-09-30 15:25:38',3,2,3232235523);
  •  * </pre>
  •  *
  •  * This script must be located at site root.
  •  * It will output:
  •  * <pre>
  •  * SELECT u.name,COUNT(v.id) cnt
  •  * FROM user u
  •  * LEFT OUTER JOIN visit v ON u.id = v.id_user
  •  * WHERE 1 AND u.name LIKE '%a%'
  •  * GROUP BY v.id_user
  •  * </pre>
  •  *
  •  * @copyright Amiro.CMS.
  •  * @category  Example
  •  * @package   DB
  •  * @since     5.10.0
  •  */
  •  
  • require 'ami_env.php';
  •  
  • // @var AMI_Response
  • $oResponse AMI::getSingleton('response');
  • $oResponse->start();
  •  
  • // Let we need to get users having 'a' in their name and number of page visited.<br>
  • $oQuery new DB_Query('user''u');
  • $oQuery
  •     ->addField('name''u')
  •     ->addExpressionField('COUNT(v.id) cnt')
  •     ->addJoinedTable('visit''v''u.id = v.id_user''LEFT OUTER JOIN')
  •     ->addWhereDef(
  •         DB_Query::getSnippet('AND u.name LIKE %s')->q('%a%')
  •     )
  •     ->addGrouping('v.id_user');
  • $oResponse->write($oQuery->get());
  • $oResponse->send();