Reguläre Ausdrücke ohne Reihenfolge?! [MySQL]

abdellaui

Erfahrenes Mitglied
Ich habe folgendes Problem:
Ich möchte eine SQL-Abfrage erzeugen die mir alle Einträge ausgibt, welche im Namen "apfel oder banane","kürbis" und "birne" gleichzeitig beinhalten. Diese Abfrage soll nur über eine REGEXP Bedingung ablaufen.

Mein Ansatz:
SQL:
SELECT * FROM `objekte` WHERE `objname`  REGEXP  '(.*apfel.*|.*banane.*)+(.*kürbis.*)+(.*birne.*)+'

Es funktioniert wie es soll, nur schade finde ich, dass die Reihenfolge eine wichtige Rolle spielt.

Beispielhafte erzeugte ausgaben wären z.B. Einträge die im Namen folgendes vorweisen:

Code:
Apfel Banane Kürbis Birne
Apfel Kürbis Birne
Banane Kürbis Birne

Nun möchte ich aber das er mir auch Folgendes ausgibt:
Code:
Apfel Banane Kürbis Birne
Apfel Kürbis Birne
Banane Kürbis Birne
Kürbis Birne Banane Apfel
Birne Kürbis Banane Apfel
Kürbis Birne Apfel Banane
Birne Kürbis Banane Apfel
Kürbis Birne Apfel
Birne Kürbis Apfel
Kürbis Birne Banane
Birne Kürbis Banane
.... (quasi ohne Reihenfolge)

Da bin ich folgend rangegangen:
SQL:
SELECT * FROM `objekte` WHERE `objname` REGEXP  '((.*apfel.*|.*banane.*)+(.*kürbis.*)+(.*birne.*)+)|(.*kürbis.*)+(.*birne.*)+(.*apfel.*|.*banane.*)+|....|...|...|....|)' (jeweils ein vertrauscht...)

Diesen Ansatz finde ich uneffizient.

Daher lautet meine Frage:
Ist es möglich einen regulären Ausdruck zu erzeugen, welches (.*apfel.*|.*banane.*)+ , (.*kürbis.*)+, (.*birne.*)+ erfüllt ohne die Reihenfolge zu beachten?
 
Das Problem damit: Wasw enn Apfel 2 mal vorkommt und Birne gar nicht? Dann hast du trotzdem 3 Treffer
Apfel Apfel Kürbis

Sowas löst man normalerweise so
SQL:
select
   o.*
from
   objekte o
where
   o.objname like '%kürbis%'
   and o.objname like '%birne%'
   and o.objname regexp '(apfel|banane)'
 
Zurück