php-Logik wird SQL-Statement
heinetz
- datenbank
0 heinetz
Hallo Forum,
ich habe vor langer Zeit mal für eine Seite die Suche gebaut.
Die Seite wird als Datensatz in einer MySQL-Tabelle abgespeichert
und die Suche durchsucht entsprechend diese Tabelle.
Zuerst mal in Worten:
---------------------
Gesucht wird der String "Test". Der Datensatz 'Seite' hat die
Eigenschaften "site_id", "site_title", "link_title" und "site_date". Gesucht wird im ersten Schritt nach Datensätzen, die den String "Test" im "link_title" haben. Die Ergebnisse werden nach "site_date" sortiert zurückgegeben. Im zweiten Schritt wird nach Datensätzen gesucht, die den String "Test" im "site_title" haben und nicht schon gefunden wurden und auch hier werden die Ergebisse nach "site_date" sortiert ausgegeben.
So ergibt sich eine Priorisierung.
site_id | link_title | site_title | site_date
--------|------------|------------|----------
1 | test1 | Bla | 3
--------|------------|------------|----------
2 | test2 | Blub | 4
--------|------------|------------|----------
3 | blub | test3 | 5
--------|------------|------------|----------
4 | bla | test4 | 2
--------|------------|------------|----------
5 | bla | blub | 8
--------|------------|------------|----------
Select site_id from table where link_title LIKE %test%
order by site_date
Ergebnis:
1
2
Select site_id from table where site_title LIKE %test%
order by site_date
Ergebis:
4
3
Die beiden Ergebisslisten werden aneinender gehängt
und so ergbibt sich die Ergebnisliste:
1
2
4
3
Ich möchte versuchen, die beiden SQL-Statements in
eines zusammenzufassen und in dem Resultset direkt
die vollständige Ergebisliste zu finden. Ich weiss
nur nicht genau wie. Wenn ich die Bedingenungen
einfach mit OR verknüpfe, geht mir die Prioisierung
verlohren. Jetzt habe ich das mal mit UNION
ausprobiert und einfach:
(
Select site_id from table where link_title LIKE %test%
order by site_date
)
UNION
(
Select site_id from table where site_title LIKE %test%
order by site_date
)
... definiert.
Die Anzahl der Funkstellen ist auch korrekt, aber die
Sortierung stimmt nicht.
Wie mache ich das am besten ?
danke fuer Tipps und
beste gruesse,
heinetz
Hallo Forum,
der Vollständigkeit halber poste ich die Lösung zu meinem Problem:
UNION war schon richtig angewendet. Die Sortierung lässt sich
auch in den einzelnen Select-Statements unterbringen. Alledings
funktioniert ORDER BY in dem Fall nur, wenn ausserdem LIMIT
angegeben ist.
beste gruesse,
heinetz