Search Values of Array in "One Go"

Mark Waddingham mark at livecode.com
Fri Aug 25 12:01:21 EDT 2017


On 2017-08-25 17:43, Sannyasin Brahmanathaswami via use-livecode wrote:
> @ Mark Waddingham
> 
> Awesome! thanks, I will test this later…
> 
> Yes, my solution, at the urging of our Cohorts of the Round Table
> LiveCode Data Diggers,
> who earlier said "Don't go looking for your needles in arrays." (
> 
> I just reformulated the SQL quaryand passed it back "up" to the stack
> script which fetched the original complete data set.
> That worked, but there are many use cases where this will be a better 
> solution.
> 
> in the context of songs  I guess we iterate several times through this
> example to a case where
> 
> 
> [title %like% "laughter" OR subtitle %like% "laughter" OR description
> %like% "laughter"
> 
> AND
> 
> genre = "Songs By Nerds"
> 
> AND
> 
> theme = "Never Say Can't"
> 
> 
> requires three trips to the mall:
> 
> array contains "Laughter"
>   AND
> array contains " Songs By Nerds "
>   AND
> array contains "Never Say Can't"
> 
> But these are very small data sets, relatively speaking.. so it will
> be fast.  But what serialization results is unclear…

Which is better (using arrays, or the DB direct) largely depends on the 
size of the dataset.

If you have a very large dataset, then you are going to run out of 
memory if you try and load it all into RAM - so a better approach (as 
you have done) is to bind the search to SQL queries on the DB. This is 
very scalable; and if you back everything you do with the (large) 
dataset by the DB, you get 'only needing what you need in RAM at any one 
time' essentially for 'free' (although, at the expense of needing to 
abstract through SQL I suppose).

If you have a small dataset (which isn't going to grow, or only grow 
very slowly) then it probably makes no difference, and you are better 
off using whichever is easier to code.

In terms of generalizing that function - then the key line which checks 
whether an element matches is:

     else if tElement contains pNeedle then

One could imagine that this could be an arbitrary predicate - pNeedle 
doesn't have to be a string, so could be an array representing a AND / 
OR style query; or could be a regex (in which case you'd use matchText).

Warmest Regards,

Mark.

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list