2

Suppose, you have a larger database of customers, such as 5000 records. Using a simple select query it can take 2-5 seconds on a mobile application to populate a listview with all thousands of customers available.

But the user only needs to select one, so what is the best way to select the customer? If you have a few records eg: 50 customers a scroll list for select is the best way doing this, but what are you doing to satisfy display for selecting from thousands?

How would you put this question to display inventory items to include them on an invoice?
This differs from the customer situation as you will repeatedly add inventory items to the invoice?

EDIT 1
I refer with client to a database of clients / database of customers

Pentium10
  • 204,586
  • 122
  • 423
  • 502
  • You might want to clarify "client". Do you mean a database of clients i.e. people or do you mean that the mobile is a client of a database on a server? – TechZen Feb 11 '10 at 19:11
  • Thank you, have done some edits on those. – Pentium10 Feb 11 '10 at 19:28
  • one idea would be asychronous autocomplete like calls to the data where you are populating the view with results. how quickly would the data filter if you started it at say... 3 characters for the request? – shawnwall Feb 11 '10 at 19:29
  • for inventory module, where there are 50 000 records it takes seconds, even a `limit 50` takes seconds. – Pentium10 Feb 11 '10 at 19:30
  • That sounds slow. How are you doing your query, even to display the full set? Are you querying against an indexed column? – Christopher Orr Feb 11 '10 at 19:40
  • Currently I display all records, so the query looks like: `select invname, invid, stock from inventory order by invname asc limit 50` I have index on invname. – Pentium10 Feb 11 '10 at 19:45

5 Answers5

2

On a mobile device with their smalls screens and restrictive input, you manage large datasets using hierarchal displays of data to start with abstractions of the full set and then drill down to actual individual entries.

All data can be divided into to subgroups which have their own subgroups and so on. To display large datasets on a mobile, you just find the subgroups and display them in order of largest to smallest and/or most general to most specific.

For example, say you have a large database of clothing. Clothing has several long established and culturally accepted subcategories so you would use those to mask size and complexity just as a department store uses categories to direct customers to the right department.

When you user opened the app, it would perform a query to get the highest level subcategories. In this example this would be, Children's, Men's and Women's. When the user selected say men's ware, they would get a list of categories of men's ware e.g. seasons. Then types of clothing, shirts, pants, etc. Then attributes of specific types of clothing and on down to a specific article of clothing.

So, a users typical input would run something like: Men's-->Summer Wear --> shirts --> cotton --> brand --> color --> shirt list --> specific shirt. At each stage the app displays just a few options for the user to select.

Searches can be tricky. Typing in detailed searches can be difficult on a mobile but broad searches can return to many items. I think searches should have some automatic restrictions on them such as letting user pick category search terms from a list of manageable size. If the searches cannot be restricted to a reasonable range, their results should be displayed in a hierarchy as well.

How would you put this question to display inventory items to include them on an invoice?

I would use a switchable view. On the iPhone that would be a tabbar. One tab would have your invoice and the other tab would have the hierarchal navigation for the inventory system. As you selected the items in the inventory tab, it would add them to the invoice tab. (If you use a properly configured data model, this will occur automatically.) The user could easily switch back and forth from adding items from the inventory to viewing their invoice.

Edit01:

I am unfamiliar with Android but on the iPhone you can have an index for very large tables which lets you jump down tables that might be hundreds of entries long. Look at contact app for an example of the index.

Of course, the index is actually just a disguised hierarchy. In the case of the contacts, there is a two level hierarchy of the contacts group alphabetically and then the contacts starting with each letter.

Edit02:

You haven't addressed the implication on data maintenance. If you add a whole lot of categories against inventory items, there is a high overhead on maintaining those categories for the end user: Inventory Group > sub-group > sub-group > sub-group > sub-group > individual item The end user needs to define and maintain the hierarchy and then correctly categorise each inventory item into each category. This is a big job.

Well, you didn't ask about maintenance and update. You asked how to display large amounts of data of which the user only needs to select only one record.

However, to answer that question, I would again repeat that since all data sets have natural categories in them, you can always find these categories programmatically so that it happens automatically. In the case of a client list, you would have attributes of name, address, phone number, job type, frequency of contact, importance etc by which the software could automatically categorize the clients into a hierarchy. Every single client management program in the world uses some type of automatic categorization to break the data into manageable chunks.

You always have the option to just create a search but again, complex searches are harder to type in on a mobile. To get around that problem, you can use some creative search building. For example, you could just have the user type in the first letter of both the first and last name and then search on that to produce a manageable sized list.

Community
  • 1
  • 1
TechZen
  • 64,370
  • 15
  • 118
  • 145
  • How would you group inventory database? How would you group client database? – Pentium10 Feb 11 '10 at 19:23
  • Split them alphabetically by first letter? – Christopher Orr Feb 11 '10 at 19:38
  • I really have no idea without looking at your data. If your talking about people, you can use their names, their phone numbers, their addresses. Also, you can provide different perspectives on the same data. Look at how the iPhone contact handles contacts. – TechZen Feb 11 '10 at 21:56
  • You haven't addressed the implication on data maintenance. If you add a whole lot of categories against inventory items, there is a high overhead on maintaining those categories for the end user: Inventory Group > sub-group > sub-group > sub-group > sub-group > individual item The end user needs to define and maintain the hierarchy and then correctly categorise each inventory item into each category. This is a big job. – Pentium10 Feb 12 '10 at 08:13
1

You do it the same way you would do it on a desktop or in a Web app: search. Let them search on partial names or other criteria and show matches. For inventory items, you search on an item code or name or category. For clients, you search on a partial name or customer code or city.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
  • You risk returning too much results to be usable in a mobile context. Let's say I'm looking for a client named Paul Martin. If I type Martin, it returns all Martin % _and_ all of % Martin wich is probably way too much and unusable. You're forcing the user to do another search and ends up wasting his time and server ressources. – Philippe Dec 03 '15 at 15:00
0

Perhaps using a filter is a good alternative? Ofcourse it depends on the situation, but it might help.

Information on making a good filter: How to dynamically update a ListView on Android

Community
  • 1
  • 1
pgsandstrom
  • 14,361
  • 13
  • 70
  • 104
0

What about adding a second layer of navigation? Instead of displaying ALL clients in a single list, you could have one list display letters A - Z, clicking on a letter could then display only clients w/ last name starting in A, etc...

tambler
  • 3,009
  • 2
  • 23
  • 26
  • The problem I have is that getting back results from a large database with a LIMIT 50, takes too much time. There is a considerable lag for the end-user. – Pentium10 Feb 11 '10 at 19:06
0

Another factor to consider is the complexity of the view(s) chosen to display the data. Is it possible to display the data with just plain old text views?

Brad Hein
  • 10,997
  • 12
  • 51
  • 74