> On Apr 9, 2018, at 10:32 AM, Tim Nevels via 4D_Tech <4d_tech@lists.4d.com> > wrote: > > Something that may not be immediately obvious is that using ORDA will reduce > the amount of code needed to query the database. In relational databases you > have to query this table, join to another table, query selection, relate > many, etc. We are all used to doing this and we need to know exactly what the > database structure is. What table is the one table, what table is the many > table, is there a many-to-many intermediate table we need to deal with, etc.
I use Django, an open-source python web framework, for my pure-web projects. This is what a user search looks like. I tell users they can search by last and first or by last name (this is for one specific search block, more complex searches are available. :-)) def people_name_search(name): if name: if ',' in name: lname, fname = split_name(name) return Person.objects.filter(last_name__istartswith=lname, first_name__istartswith=fname, deactivated=False)[:10] else: return Person.objects.filter(last_name__istartswith=name, deactivated=False)[:10] else: return Person.objects.none() You can suss that out even though there is magic syntax (objects? istartswith?). What you can’t see is that the object “Person” has a default sort order defined (last name, first name), so that result gives you an ordered list of the first 10 records that match the query. Below is a cross table (join) query: The table relationship are Person <—Enrollment—> Registration and Person <—ProductSale—> Registration.. The query gives me the registration records that have associated enrollment or product sales records that are linked to a person whose name is …. The Q thing is the syntactic sugar needed to do OR searches. (all the frameworks have their wth.) def enrollee_name_search(name): if name: if ',' in name: lname, fname = split_name(name) return Registration.objects.select_related().filter(Q(enrollment__person__last_name__istartswith=lname, enrollment__person__first_name__istartswith=fname) | Q(productsale__person__last_name__istartswith=lname, productsale__person__first_name__istartswith=fname) ) else: return Registration.objects.select_related().filter(Q(enrollment__person__last_name__istartswith=name) | Q(productsale__person__last_name__istartswith=name) ) else: return Registration.objects.none() All of which is to say, ORDA is going to make complete sense if you’ve done any work in a semi-modern framework. ********************************************************************** 4D Internet Users Group (4D iNUG) FAQ: http://lists.4d.com/faqnug.html Archive: http://lists.4d.com/archives.html Options: https://lists.4d.com/mailman/options/4d_tech Unsub: mailto:4d_tech-unsubscr...@lists.4d.com **********************************************************************