2016-09-07 1 views
0

Ich bin ein PHP-Router zu schreiben, die mit einer solchen Abfrage Seite id in DatenbankabfragenStore-URL mit Wildcards in MySQL und Rückspiele

SELECT `id` FROM `pages` WHERE '/about/test' REGEXP `url` ORDER BY `url` 

aus einer solchen Tabelle

id type_id url    name lookup 
1 0  /about/[^/]* NULL NULL 
2 1  /about/company NULL NULL 

So wird es id 2 auf '/about/company' und id 1 auf /about/whatever auf dem ersten Zeile des Ergebnisses

ich bin auf der Suche nach dem besten Weg, um die wilden abrufen Kartenwerte von MySQL, z.B. erhalten ID von '/about/[^/]+' Eintrag und 'test' als zweites Argument beim Überschreiten '/about/test'; und nur ID erhalten, wenn '/about/company'

einfach vorbei, ich will variadische Anzahl der Spalten bekommen, wo erste Spalte Rückkehr ID und andere - Wildcard-Werte in der richtigen Reihenfolge

+1

Bearbeiten Sie Ihre Frage und liefern Beispieldaten und die gewünschten Ergebnisse. Ich folge nicht der Erklärung. –

+0

@GordonLinoff hinzugefügt Tabelle Beispiel und mehr klare Frage –

Antwort

0

Lassen Sie mich an, dass Sie eine Fahne haben, der angibt, ob etwas ist ein Wildcard-Muster oder ein einfacher Vergleich.

Wenn Sie alle Spiele möchten, können Sie tun:

SELECT `id` 
FROM `pages` 
WHERE '/about/test' REGEXP `url` AND url_has_wildcard = 0 
UNION ALL 
SELECT `id` 
FROM `pages` 
WHERE '/about/test' REGEXP `url` AND url_has_wildcard = 1 AND 
     NOT EXISTS (SELECT 1 
        FROM pages 
        WHERE '/about/test' REGEXP `url` AND url_has_wildcard = 0 
       ); 

Sie können festlegen, eine solche Fahne mit - was sonst - ein regulärer Ausdruck. Sagen, so etwas wie dieses:

WHERE '/about/test' REGEXP `url` AND 
     (url REGEXP '^[a-zA-Z0-9/]*$') -- or whatever the valid characters are 

Wenn Sie nur eine Zeile zurückgegeben werden soll, die Sie tun können:

SELECT `id` 
FROM `pages` 
WHERE '/about/test' REGEXP `url` 
ORDER BY (url REGEXP '^[a-zA-Z0-9/]*$') DESC 
LIMIT 1; 
+0

Auf diese Weise konnte ich feststellen, ob URL wurde wildcarded oder nicht, aber ich möchte auch die ersetzten Zeichenfolgen für jeden Platzhalter erhalten. –