-FP Posted January 22, 2016 Share Posted January 22, 2016 Hi, So basically I'm using the chatbox application, and I want to add to one of its templates the amount of messages that have been sent. I guess I have to use \IPS\Db::i()->, but I need to count the amount of rows in a column of the chatbox table and then display it. Any ideas? Link to comment Share on other sites More sharing options...
-FP Posted January 23, 2016 Author Share Posted January 23, 2016 Bump, anyone? Link to comment Share on other sites More sharing options...
-FP Posted January 24, 2016 Author Share Posted January 24, 2016 Bumping this again... Link to comment Share on other sites More sharing options...
-FP Posted January 24, 2016 Author Share Posted January 24, 2016 Found a way to display it, but I think it's kinda cheesy... anyway this does what I needed: {{$rows = 0;}} {{$chatbox_rows = \IPS\Db::i()->select( 'chat', 'bimchatbox_chat' );}} {{foreach $chatbox_rows as $row}} {{$rows = $rows + 1;}} {{endforeach}} {$rows} Now onto the next problem, I want to grab the user IDs column, and find who has the most messages... Link to comment Share on other sites More sharing options...
-FP Posted January 25, 2016 Author Share Posted January 25, 2016 Made it more simple... {{$chatbox_rows = \IPS\Db::i()->select( 'user', 'bimchatbox_chat' );}} {{$rows = count($chatbox_rows);}} {$rows} Still trying to figure out how to find the most repeated values in $chatbox_rows. {{array_count_values($chatbox_rows);}} Throws an error. Link to comment Share on other sites More sharing options...
-FP Posted January 25, 2016 Author Share Posted January 25, 2016 I need to convert this query to some invision template logic... SELECT user, COUNT(*) as Messages FROM bimchatbox_chat GROUP BY user ORDER BY COUNT(*) DESC LIMIT 5; I guess so far I only have the select part this this: {{$chatbox_rows = \IPS\Db::i()->select( 'user', 'bimchatbox_chat' );}} Been trying to do this for hours now lol... Link to comment Share on other sites More sharing options...
Daniel F Posted January 25, 2016 Share Posted January 25, 2016 {{$chatbox_rows = \IPS\Db::i()->select( 'COUNT(*) as count', 'bimchatbox_chat' )->first(); }} Link to comment Share on other sites More sharing options...
-FP Posted January 25, 2016 Author Share Posted January 25, 2016 17 minutes ago, Daniel F said: {{$chatbox_rows = \IPS\Db::i()->select( 'COUNT(*) as count', 'bimchatbox_chat' )->first(); }} Thanks, that's to count the total rows I see. Can it be modified to return the value that is repeated the most in a column? Like I think it needs the GROUP BY and ORDER BY statements. Link to comment Share on other sites More sharing options...
jeece76 Posted January 25, 2016 Share Posted January 25, 2016 I'm trying to do the same thing but i can't show all the results from the database. {{$mangas = \IPS\Db::i()->select( 'field_30', 'cms_custom_database_6', 'field_33 = 1' )->first();}} How i can do for print full results and not only the first ? Link to comment Share on other sites More sharing options...
-FP Posted January 25, 2016 Author Share Posted January 25, 2016 @jeece76 I think this might work for you. //Store all mangas {{$mangas = \IPS\Db::i()->select( 'field_30', 'cms_custom_database_6', 'field_33 = 1' );}} //Loop through all of them {{foreach $mangas as $manga}} {$manga} {{endforeach}} Link to comment Share on other sites More sharing options...
Daniel F Posted January 26, 2016 Share Posted January 26, 2016 11 hours ago, -FP said: Thanks, that's to count the total rows I see. Can it be modified to return the value that is repeated the most in a column? Like I think it needs the GROUP BY and ORDER BY statements. Yes, take a look at the method doc for the other params /** * Build SELECT statement * * @param array|string $columns The columns (as an array) to select or an expression * @param array|string $table The table to select from. Either (string) table_name or (array) ( name, alias ) or \IPS\Db\Select object * @param array|string|NULL $where WHERE clause - see \IPS\Db::compileWhereClause() for details * @param string|NULL $order ORDER BY clause * @param array|int $limit Rows to fetch or array( offset, limit ) * @param string|NULL|array $group Column(s) to GROUP BY * @param array|string|NULL $having HAVING clause (same format as WHERE clause) * @param int $flags Bitwise flags * @li \IPS\Db::SELECT_DISTINCT Will use SELECT DISTINCT * @li \IPS\Db::SELECT_SQL_CALC_FOUND_ROWS Will add SQL_CALC_FOUND_ROWS * @li \IPS\Db::SELECT_MULTIDIMENSIONAL_JOINS Will return the result as a multidimensional array, with each joined table separately * @return \IPS\Db\Select * */ public function select( $columns=NULL, $table, $where=NULL, $order=NULL, $limit=NULL, $group=NULL, $having=NULL, $flags=0 ) Link to comment Share on other sites More sharing options...
-FP Posted January 26, 2016 Author Share Posted January 26, 2016 Thanks! Got it. {{$top_shouters = \IPS\Db::i()->select( 'user', 'bimchatbox_chat', '', 'COUNT(*) DESC', '5', 'user' ); }} Link to comment Share on other sites More sharing options...
jeece76 Posted January 26, 2016 Share Posted January 26, 2016 @-FP Thanks! But how to do for an entire table and sort results by fields like records in page (with conditions like "manga->field_33('1')") ? & how I can return id from records? "$record->id" didn't work :/ Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.