Searching - Multiple Databases (Relational)

WebDNA can search multiple databases as easily as it searches a single database. Often you will want to look up information in a second database while displaying the results of a search. If the relationship is very simple (an exact match of text in one database field to the text of another database field) then you may use the faster [Lookup] tag. If the relationship is more complex, then you may need the more sophisticated [Search] context.

[Lookup] Example: Let's say you maintain a list of names and addresses, and you want to display the fully-spelled-out name of the state a person lives in. However, you only store the 2-letter code in the address database. Create a database that lists all 50 states by their 2-letter code, and put the fully-spelled state name into another field in that database:

-------States.db-------
Abbrev	FullName
CA	California
AZ	Arizona
FL	Florida
------------------------

-------Results.tpl-----
[FoundItems]
[Name], [Address], [City]
[Lookup db=States.db&lookInField=Abbrev&value=[State]&returnField=FullName]
[/FoundItems]
------------------------

Notice that the lookup looks through the States.db database for an exact match of the [State] field information coming from the first database. It then returns the text from the [FullName] field of the corresponding state name stored in States.db.

[Search] Example: Let's say you store all the orders created by your store in two databases. One of the databases stores the order# and Name/Address/Account information, while another database stores each individual SKU of the line items purchased during an order:

-------Orders.db-------
OrderNumber	Name	Address	City	State	Zip
1234	Grant	667 Corte	San Marcos	CA	90031
1395	John	12 Elias	San Diego	CA	90004
------------------------

------LineItems.db------
OrderNumber	SKU	Qty	Price
1234	Shoe1	1	12.95
1234	Shirt1	2	15.95
1234	Service	1	99.95
1395	Gift1	1	9.95
1395	Box12	3	74.95
------------------------

To display a list of all the orders with associated line items, your search results template might look like the following:

-------Results.tpl-----
[FoundItems]
  [OrderNumber], [Name], [Address], [City]
  [Search db=LineItems.db&eqOrderNumberdata=[OrderNumber]]
    [FoundItems]
      [SKU], [Qty], [Price]
    [/FoundItems]
  [/Search]
[/FoundItems]
------------------------

----Output from above----
1234, Grant, 667 Corte, San Marcos
	Shoe1	1	12.95
	Shirt1	2	15.95
	Service	1	99.95
1395, John, 12 Elias, San Diego
	Gift1	1	9.95
	Box12	3	74.95
-------------------------

Notice that the interior [Search] looks for all matching line items with the same order number as the exterior Orders.db database. This collects and displays all line items for that order underneath the proper header information.