orderBy Search Results

15 posts by 3 authors in: Forums > CMS Builder
Last Post: May 8, 2013   (RSS)

By s2smedia - May 7, 2013

I have a search function on my site that works great.. however, not sure how to order the results by Alphabetical order:

ex:   'orderBy'     => 'item ASC',

<?php
require_once "../../admin/lib/viewer_functions.php";

$searchOptions = array();
$searchOptions['keywords'] = @$FORM['q'];
$searchOptions['perPage'] = "10";
$searchOptions['debugSql'] = "0";

$searchTables = array();
$searchTables['products'] = array(
'viewerUrl' => 'productdetails.php',
'titleField' => 'item',
'summaryField' => 'item_description',
'field1' => 'pattern',
'field2' => 'size',
'searchFields' => array('item','item_description','pattern'),

);

list($searchRows, $searchDetails) = searchMultipleTables($searchTables, $searchOptions);


?>

any help would be appreciated! thanks!

By s2smedia - May 8, 2013

ok great.. problem is Im not sure exactly how to implement that into my code. :(

By Steve99 - May 8, 2013

Actually, this might work best for you. Try this:

          function compare_title_alpha($a, $b) { 
            return strnatcmp($a['yourField'], $b['yourField']); 
          } 
         
          usort($yourRecords, 'compare_title_alpha');

- Steve

By s2smedia - May 8, 2013

I added this (towards bottom), doesnt seem to be working:

<?php
require_once "../../admin/lib/viewer_functions.php";

$searchOptions = array();
$searchOptions['keywords'] = @$FORM['q'];
$searchOptions['perPage'] = "10";
$searchOptions['debugSql'] = "0";

$searchTables = array();
$searchTables['products'] = array(
'viewerUrl' => 'productdetails.php',
'titleField' => 'item',
'summaryField' => 'item_description',
'field1' => 'pattern',
'field2' => 'size',
'searchFields' => array('item','item_description','pattern'),

);

list($searchRows, $searchDetails) = searchMultipleTables($searchTables, $searchOptions);


function compare_title_alpha($a, $b) {
return strnatcmp($a['item'], $b['item']);
}

usort($searchTables, 'compare_title_alpha');

?>

By Steve99 - May 8, 2013

It looks like you should change this part:

This:
usort($searchTables, 'compare_title_alpha');

Change to this:
usort($searchRows, 'compare_title_alpha');


It works great for me. This is the basic main setup from the code output:

list($yourRecords, $yourMetaData) = getRecords(array(
          'tableName'   => 'yourTable',
));

function compare_title_alpha($a, $b) { 
 return strnatcmp($a['item'], $b['item']); 


usort($yourRecords, 'compare_title_alpha');

Let me know how you make out.

- Steve

By s2smedia - May 8, 2013

UHHGG.. now I get Undefined index: item in /home/roshotel/public_html/test/Products/search.php on line 28 Notice: Undefined index: item in /home/roshotel/public_html/test/Products/search.php on line 28 Notice:

line 28 is:    return strnatcmp($a['item'], $b['item']); 

full code:

<?php
require_once "../../admin/lib/viewer_functions.php";




$searchOptions = array();
$searchOptions['keywords'] = @$FORM['q'];
$searchOptions['perPage'] = "10";
$searchOptions['debugSql'] = "0";


$searchTables = array();
$searchTables['products'] = array(
'viewerUrl' => 'productdetails.php',
'titleField' => 'item',
'summaryField' => 'item_description',
'field1' => 'pattern',
'field2' => 'size',
'searchFields' => array('item','item_description','pattern'),

);





list($searchRows, $searchDetails) = searchMultipleTables($searchTables, $searchOptions);
function compare_title_alpha($a, $b) {
return strnatcmp($a['item'], $b['item']);
}

usort($searchRows, 'compare_title_alpha');


?>

By Steve99 - May 8, 2013

Yikes. Well "item" isn't part of $searchRows then. Is it in $searchDetails?

By s2smedia - May 8, 2013

I give up... maybe someone from Interactive Tools can figure it out..

$searchTables = array();
$searchTables['products'] = array(
'viewerUrl' => 'productdetails.php',
'titleField' => 'item',
'summaryField' => 'item_description',
'field1' => 'pattern',
'field2' => 'size',
'searchFields' => array('item','item_description','pattern'),

);

By Jason - May 8, 2013

Hi,

One things I noticed, is that in your code, you  are only searching against 1 table (products).  In this case, it might be easier to use a simple getRecords call instead of using searchMultipleTables.  However, if you want to use the current set up, you can use "orderBy" in the search options.  For example, if you want to sort by "item":

$searchOptions['orderBy'] = "item";

Hope this helps

---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/