Skip to main content

Mysql queries (complex)

Scenario-1: Using the count or sum with inner join query

Table structures:

videos: id, title, description, date_uploaded

categories: id, category_name

votes: id, videoid, vote, date (vote will range between 1 and 5)

Query:
SELECT v.id as vid, v.title, v.description, v.date_uploaded, c.category_name, v2.total, v2.count FROM videos v inner join
categories c inner join (select videoid, sum(vote) as total, count(*) as count from votes group by videoid) v2 on v.category_id=c.id and v2.videoid=v.id and v.featured=1 and v.published=1 order by v.date_uploaded desc;

Resultset:

vid  title  description    date_uploaded            id    category_name   total  count
12   Ford   inauguration 2011-10-07 01:08:22    3    Inauguration        97     31
9     Nano   new car        2011-11-02 03:15:25    2    Automobile        120    38  

From the above result set, we can get the percentage of votes for videos as: (total / count) * 20
Note: The above query assumes that you have a record in votes table for each video id in videos table.

Scenario-2: Get the count of videos for each category

Table structures:

videos: id, title, category_id

categories: id, category_name

Query:
SELECT c.id, c.category_name, v.total FROM categories c inner join (select category_id, count(*) as total from videos where published=1 group by category_id) v on c.id=v.category_id group by c.id order by c.category_name;

Result: We can get the total number of videos for each category

Comments

Popular posts from this blog

php strip all tags

The below function can strip almost all tags from a string. function strip_all_tags($string) {     $string = preg_replace( '@<(script|style)[^>]*?>.*?@si', '', $string );     $string = strip_tags($string);     return trim($string); } $a = '<script type="text/javascript" src="jquery.js"></script> <div id="test" style="padding:5px; color:red;">Hello world</div>'; echo strip_all_tags($a); // outputs: Hello world

Joomla validate chrono forms using jquery

It is a common practice to use Chrono forms in our joomla site to setup various forms in the site, be it a contact us form, submit a ticket form, or whatever. I have set the option "validate form" to "No" under chronoform settings in admin panel, and also preferred to not include any js or css files. For validating the chrono forms, i prefer jquery. So first lets add jquery support in our joomla. It is quite simple: 1. Download jquery.js and jquery_min.js (1.4.2 version is enough) and place them in media/system/js folder of your joomla. 2. Edit libraries->joomla->html->html->behavior.php, and add the following function below the mootools() function: function jQuery($debug = null)     {         static $loaded;         global $mainframe;         // Only load once         if ($loaded) {    ...

php get content between tags

This involves parsing the dom document. <?php function getTextBetweenTags($tag, $html) {     $dom = new domDocument;     @$dom->loadHTML($html);         $dom->preserveWhiteSpace = false;     $content = $dom->getElementsByTagname($tag);     $out = array();         foreach ($content as $item)     {         $out[] = $item->nodeValue;     }     return $out; } $xhtml = '<tag>abc def</tag><tag>123 456</tag>'; $content2 = getTextBetweenTags('tag', $xhtml); foreach( $content2 as $item ) {     echo $item.'<br />'; } ?> Output: abc def 123 456