Abfrage soll nur ein Ergebnis liefern
Klaus
- datenbank
0 Sven Rautenberg0 Vinzenz Mai
Hallo,
folgende Abfrage liefert bei mir leider soviele Zeilen, wie auch in der Kommentar-Tabelle gefunden werden.
Ich möchte aber, dass nur das erste gefundene Ergebnis pro Satz der ersten Tabelle gezeigt wird.
select a.*,
b.vorname as erfvorname,b.name as erfname,b.vorname as b_vorname,b.name as b_name,
c.kommentar
from kdticket as a
left join mitarbeiter as b
on a.lastchanged = b.personalnummer
left join kdticket_comments as c
on a.t_idnr = c.in_idnr
where a.kurztext like '%$suche%' OR a.langtext like '%$suche%' OR c.kommentar like '%$suche%'
Wie muss ich die Abfrage anpassen, damit ich nur eine Zeile pro Tabelle kdticket erhalte?
Moin!
Hallo,
folgende Abfrage liefert bei mir leider soviele Zeilen, wie auch in der Kommentar-Tabelle gefunden werden.
Ich möchte aber, dass nur das erste gefundene Ergebnis pro Satz der ersten Tabelle gezeigt wird.
Das erste in welcher Reihenfolge? Sortiert nach Vorname das erste? Oder nach Nachname? Oder alphabetisch nach dem ersten Zeichen des Kommentars? Wenn du bei Datenbankabfragen keine Reihenfolge definierst, kriegst du niemals das "erste" Element, sondern höchstens "irgendein beliebiges" - das hingegen ist relativ simpel: mit LIMIT (bei MySQL).
- Sven Rautenberg
Hallo Sven,
das Limit wird mit nicht weiterhelfen, da ja die komplette Ergebnisliste damit limitiert wird.
In der ersten Tabelle werden Problem-Tickets erstellt mit einem Kurztext und einem Langtext (ausführliche Fehlerbeschreibung).
Zu diesem Ticket können beliebig viele Kommentare erfasst werden, die in der zweiten Tabelle gespeichert werden.
Wenn der Benutzer nun einen Suchbegriff eingibt, soll natürlich das entsprechende Ticket nur einmal angezeigt werden. Unabhängig davon, ob der Suchbegriff im Langtext oder in einem der Kommentare gefunden wurde.
Sollte der Suchbegriff in mehreren Kommentaren pro Ticket gefunden werden, dann soll die Ergebnisliste nur den ersten gefundenen Kommentar enthalten.
Selbstverständlich kann der Suchbegriff auch in beliebig vielen Tickets gefunden werden, diese sollen dann auch in der Ergebnisliste erscheinen.
Daher ist auch die Sortierung zunächst nebensächlich. Davon abgesehen, wird der Benutzer die Möglichkeit haben, die Sortierung dann selber zu bestimmen (nach Datum, nach Benutzer, nach Kategorie, etc.)
Klaus
Hallo,
hilft dir distinct weiter ?
Gruß
Ole
Hallo Ole,
hilft dir distinct weiter ?
leider nicht. Füge ich ein Distinct direkt nach dem Select ein, oder auch ein Distinct a.t_idnr oder ein Distinct c.in_idnr, so werden mir weiterhin munter mehrere Sätze präsentiert.
Klaus
Hallo,
hilft dir distinct weiter ?
leider nicht. Füge ich ein Distinct direkt nach dem Select ein, oder auch ein Distinct a.t_idnr oder ein Distinct c.in_idnr, so werden mir weiterhin munter mehrere Sätze präsentiert.
die Datensätze unterscheiden sich ja in diversen Spalten. Du benötigst eine korrelierte Unterabfrage, wie ich bereits schrieb. Nur Du kennst das Kriterium mittels dessen Du den von Dir gewünschten Datensatz mit dem passenden Kommentar aus Deinem bisherigen Ergebnis herausfiltern kannst. Als "Ausgangstabelle" für eine korrelierte Unterabfrage kannst Du auch eine Abfrage verwenden.
Freundliche Grüße
Vinzenz
Hallo,
Ich möchte aber, dass nur das erste gefundene Ergebnis pro Satz der ersten Tabelle gezeigt wird.
Wie muss ich die Abfrage anpassen, damit ich nur eine Zeile pro Tabelle kdticket erhalte?
wie üblich mit einer korrelierten Unterabfrage.
Freundliche Grüße
Vinzenz