Generelt er ikke literære søgninger i databasen performancemæssigt et rigtig skidt valg.
Det handler om at have et godt tabelsetup med god normalisering.
Eksempelvis vil det kunne betale sig at dele en opskrift op minimum tre tabeller. En tabel med ingredienser og en tabel med navn, beskrivelse og hvad der ellers hører sig til.
Selve opskrifterne:
+------------+---------------------------------+----------------------+
| opskriftId | oNavn | oBeskrivelse |
+------------+---------------------------------+----------------------+
| 12 | Kylling i Cola | Forsteg kyllinger... |
| 458 | Flæskesteg | Skær sværene ned ... |
| 365 | Hvidløgsroast | Hak hvidløget i s... |
| 79 | Vandbakkelse | En kagemand der i... |
+------------+---------------------------------+----------------------+
En generel ingrediensliste der sikrer dig ensartethed i ingrediensnavnene og derfor optimerer dine brugeres søgning:
+--------------+--------------+
| ingrediensId | iNavn |
+--------------+--------------+
| 12 | Salt |
| 13 | Peber |
| 14 | Kyllingef... |
| 15 | Løgpulver |
| 16 | Coca Cola |
| 17 | Hvidløg |
+--------------+--------------+
Og slutteligt, tabellen som holder ingredienserne op mod selve opskrifterne:
+------------+--------------+--------------+
| opskriftId | ingrediensId | iMaengde |
+------------+--------------+--------------+
| 12 | 12 | knivspids |
| 12 | 13 | knivspids |
| 12 | 14 | 2 |
| 12 | 15 | 15g |
| 12 | 16 | 3 dl. |
| 12 | 36 | 2,5 dl. |
+------------+--------------+--------------+
Ved at søge på ingredienserne, kan du nu få en liste ud over de opskrifter der indeholder de ingredienser der er angivet som kriterier.
Eksempel:
$words = "hvidløg,koteletter";
$list = explode("," $words);
$sql = "SELECT a.opskriftId FROM ingrediens_liste a, ingredienser b WHERE b.iNavn IN ('".implode("', '", $list)."') AND a.ingrediensId=b.ingrediensId";
Men der er mange måder at gøre det på; det her var bare en tanke...