abdellaui
Erfahrenes Mitglied
Es ist vom Gedankenweg her immer die eine und selbe Anforderung. Ich wollte sie abstrakt halten.
Hier noch ein Beispiel, worauf ich hinaus will:
Üblicher SQL-Abfrage (mit INDEX auf preis)
Diese Abfrage kostet mir jedoch enorm viel Zeit. Deshalb wollte ich es so umstellen, das die 1. Tabelle zuerst einmal gelesen wird (ORDER BY id DESC) und bei entsprechender Kriterien (bezogen auf Tabelle 2) aufgenommen wird.
Hier noch ein Beispiel, worauf ich hinaus will:
Code:
Eintraege:
+-------------------------------------+
| id | artikelname | preis | ab | cd |
+-------------------------------------+
| 1 | abcd | 10000 | 1 | 65 |
| 2 | efgh | 2000 | 99 | 25 |
| 3 | abcd | 1000 | 78 | 22 |
| 4 | mfgp | 500 | 65 | 8 |
| 5 | qfgt | 1750 | 12 | 11 |
| 6 | abcd | 100 | 55 | 12 |
+-------------------------------------+
Suchauftrag:
+------------------------------------------------+
| id | suchename | preismin | preismax | ab | cd |
+------------------------------------------------+
| 1 | %ab% | 0 | 10001 | 0 | 1 |
| 2 | %fg% | 100 | 500 | 5 | 20 |
| 3 | %bc% | 1500 | 1700 | 10 | 5 |
+------------------------------------------------+
Üblicher SQL-Abfrage (mit INDEX auf preis)
SQL:
SELECT * FROM Eintraege AS e, Suchauftrag AS s
WHERE e.artikelname LIKE s.suchename
AND e.preis BETWEEN s.preismin AND s.preismax
AND e.ab > s.ab
AND e.cd > s.cd
GROUP BY e.id -- Redundanten vermeiden
ORDER BY e.id
LIMIT 10
Diese Abfrage kostet mir jedoch enorm viel Zeit. Deshalb wollte ich es so umstellen, das die 1. Tabelle zuerst einmal gelesen wird (ORDER BY id DESC) und bei entsprechender Kriterien (bezogen auf Tabelle 2) aufgenommen wird.