![]() |
Datenbank: MySQL • Version: 5.0.85-community • Zugriff über: copycat
SQL Optimierung / Erweiterung
Hallo zusammen
für die Benutzerauthentifizierung auf dem MySQL Server verwende ich folgende funktionierenden SQL:
SQL-Code:
diesen möchte ich nun ein wenig erweitern / um die Abfrage von 2 Tabellen ungefähr so:
( MEMBER_GROUP = 'ADMIN')
OR (( MEMBER_GROUP = 'CAMP') AND (CONDITION_VALUE = NEW.C_NO)) OR (NEW.C_NO IN (SELECT RPL$GROUPS_RIGHTS.CAMP_NO FROM RPL$GROUPS JOIN RPL$GROUPS_RIGHTS ON RPL$GROUPS_RIGHTS.GROUP_NO = RPL$GROUPS.GROUP_NO WHERE RPL$GROUPS.GROUP_NO = MEMBER_GROUP))
SQL-Code:
Die 2 Tabellen sind:
( MEMBER_GROUP = 'ADMIN')
OR (( MEMBER_GROUP = 'CAMP') AND (CONDITION_VALUE = NEW.C_NO) AND (NEW.SERVICE_NAME IN (SELECT RPL$SERVICE_TABLES.TABLE_NAME FROM RPL$SERVICE JOIN RPL$SERVICE_TABLES ON RPL$SERVICE_TABLES.SERVICE_NAME = RPL$SERVICE.SERVICE_NAME WHERE RPL$SERVICE.SERVICE_NAME LIKE SERVICE)) ) OR (NEW.C_NO IN (SELECT RPL$GROUPS_RIGHTS.CAMP_NO FROM RPL$GROUPS JOIN RPL$GROUPS_RIGHTS ON RPL$GROUPS_RIGHTS.GROUP_NO = RPL$GROUPS.GROUP_NO WHERE RPL$GROUPS.GROUP_NO = MEMBER_GROUP) AND (NEW.SERVICE_NAME IN (SELECT RPL$SERVICE_TABLES.TABLE_NAME FROM RPL$SERVICE JOIN RPL$SERVICE_TABLES ON RPL$SERVICE_TABLES.SERVICE_NAME = RPL$SERVICE.SERVICE_NAME WHERE RPL$SERVICE.SERVICE_NAME LIKE NEW.SERVICE))) ) RPL$SERVICE Felder: SERVICE_NAME RPL$SERVICE_TABLES Felder: SERVICE_NAME / TABLE_NAME Ein Problem ist dass ich in der aktuellen Tabelle ein Feld ( NEW.SERVICE )habe das mehrere Werte beinhalten kann. ( z.B Hotel / Altersheim ... ) Es soll nun geprüft werden ob in RPL$SERVICE.SERVICE_NAME ein Wert vorhanden ist der im Feld NEW.SERVICE auftaucht ( Es können auch mehrere sein ). Wie kann ich auf diese in dieser SQL zugreifen? Wenn Ihr noch Tipps für die Optimierung oder Vereinfachung habt bin ich dankbar. Hoffe ich konnte die Frage verständlich erläutern. Manfred |
Re: SQL Optimierung / Erweiterung
konnte eine kleine Optimierung am SQL-String vornehmen:
SQL-Code:
was leider immer noch nicht klar ist:
( MEMBER_GROUP = 'ADMIN')
OR (( MEMBER_GROUP = 'CAMP') AND (CONDITION_VALUE = NEW.C_NO) AND (NEW.SERVICE_NAME IN (SELECT ST.TABLE_NAME FROM RPL$SERVICE S JOIN RPL$SERVICE_TABLES ST ON ST.SERVICE_NAME = S.SERVICE_NAME WHERE S.SERVICE_NAME LIKE NEW.SERVICE))) ) OR (NEW.C_NO IN (SELECT GR.CAMP_NO FROM RPL$GROUPS G JOIN RPL$GROUPS_RIGHTS GR ON GR.GROUP_NO = G.GROUP_NO WHERE G.GROUP_NO = MEMBER_GROUP) AND (NEW.SERVICE_NAME IN (SELECT ST.TABLE_NAME FROM RPL$SERVICE S JOIN RPL$SERVICE_TABLES ST ON ST.SERVICE_NAME = S.SERVICE_NAME WHERE S.SERVICE_NAME LIKE NEW.SERVICE))) ) Zitat:
währe hier für einen Tipp dankbar. Manfred |
Re: SQL Optimierung / Erweiterung
Zitat:
|
Re: SQL Optimierung / Erweiterung
Zitat:
Das lässt sich in einem gewissen Ramen anpassen. Habe gerade noch das gefunden: ![]() werde mich damit wohl ein wenig beschäftigen. MATCH (col1,col2,...) AGAINST (expr [search_modifier]) Manfred |
Re: SQL Optimierung / Erweiterung
Bin nun ein wenig weitergekommen.
SQL-Code:
es besteht so wie es aussieht nur noch ein Problem mit diesem Punkt hier.
( MEMBER_GROUP = 'ADMIN')
OR (( MEMBER_GROUP = 'CAMP') AND (CONDITION_VALUE = NEW.C_NO) AND ('MEMBER' IN (SELECT ST.TABLE_NAME FROM RPL$SERVICE S JOIN RPL$SERVICE_TABLES ST ON ST.SERVICE_NAME = S.SERVICE_NAME WHERE S.SERVICE_NAME =(SERVICE LIKE ('%MEMBER%') )))) OR (NEW.C_NO IN (SELECT GR.CAMP_NO FROM RPL$GROUPS G JOIN RPL$GROUPS_RIGHTS GR ON GR.GROUP_NO = G.GROUP_NO WHERE G.GROUP_NO = MEMBER_GROUP) AND ('MEMBER' IN (SELECT ST.TABLE_NAME FROM RPL$SERVICE S JOIN RPL$SERVICE_TABLES ST ON ST.SERVICE_NAME = S.SERVICE_NAME WHERE S.SERVICE_NAME =(SERVICE LIKE ('%MEMBER%') ))))
SQL-Code:
Das geht so nicht ... eine kleine Hilfe?
WHERE S.SERVICE_NAME =(SERVICE LIKE ('%MEMBER%') ))))
Manfred |
Re: SQL Optimierung / Erweiterung
Hallo,
SQL-Code:
Merkwürdiges Statement.
WHERE S.SERVICE_NAME =(SERVICE LIKE ('%MEMBER%') ))))
SQL-Code:
WHERE S.SERVICE_NAME LIKE '%MEMBER%'
Heiko |
Re: SQL Optimierung / Erweiterung
Zitat:
Danke für Deinen Tipp, leider geht das so auch nicht. Es soll am Ende ja "verglichen" werden das SERVICE den String 'MEMBER' enthält und auch in WHERE S.SERVICE_NAME vorkommt. Als kleines funktionierendes Bsp.
SQL-Code:
Dies möchte ich Erweitern wie im vorigen Bsp. Das Problem ist nur das SERVICE mehre Einträge
( MEMBER_GROUP = 'ADMIN')
OR (( MEMBER_GROUP = 'CAMP') AND (CONDITION_VALUE = NEW.C_NO)) OR (NEW.C_NO IN (SELECT RPL$GROUPS_RIGHTS.CAMP_NO FROM RPL$GROUPS JOIN RPL$GROUPS_RIGHTS ON RPL$GROUPS_RIGHTS.GROUP_NO = RPL$GROUPS.GROUP_NO WHERE RPL$GROUPS.GROUP_NO = MEMBER_GROUP)) beinhalten kann aus diesem Grund habe ich das mit
SQL-Code:
ausgedacht. Leider noch ohne Erfolg.
WHERE S.SERVICE_NAME =(SERVICE LIKE ('%MEMBER%') ))))
|
Re: SQL Optimierung / Erweiterung
Vielleicht so...
SQL-Code:
WHERE SERVICE LIKE '%MEMBER%'
AND SERVICE_NAME LIKE '%' + SERVICE + '%' |
Re: SQL Optimierung / Erweiterung
Zitat:
Leider geht das auch nicht. Habe echt schon div. Varianten durchgetestet. z.B.
SQL-Code:
will er auch nicht, und auch das nicht
WHERE S.SERVICE_NAME AND SERVICE LIKE '%MEMBER%' )))
SQL-Code:
Dies widerum geht einwandfrei solange ich nur einen Wert in dem Feld habe:
WHERE S.SERVICE_NAME AND LIKE '%MEMBER%' AND SERVICE LIKE '%MEMBER%')))
SQL-Code:
( MEMBER_GROUP = 'ADMIN')
OR (( MEMBER_GROUP = 'CAMP') AND (CONDITION_VALUE = NEW.C_NO) AND ('MEMBER' IN (SELECT ST.TABLE_NAME FROM RPL$SERVICE S JOIN RPL$SERVICE_TABLES ST ON ST.SERVICE_NAME = S.SERVICE_NAME WHERE S.SERVICE_NAME = SERVICE)) ) OR (NEW.C_NO IN (SELECT GR.CAMP_NO FROM RPL$GROUPS G JOIN RPL$GROUPS_RIGHTS GR ON GR.GROUP_NO = G.GROUP_NO WHERE G.GROUP_NO = MEMBER_GROUP) AND ('MEMBER' IN (SELECT ST.TABLE_NAME FROM RPL$SERVICE S JOIN RPL$SERVICE_TABLES ST ON ST.SERVICE_NAME = S.SERVICE_NAME WHERE S.SERVICE_NAME = SERVICE))) |
Re: SQL Optimierung / Erweiterung
Zitat:
Was geht dann nicht? gibt es eine Fehlermeldung, wenn es mehrere Werte sind? Oder gibt das Statement nicht die richtigen Zeilen zurück? Welches Feld ist in deiner Aussage gemeint? Zitat:
Zitat:
Zitat:
Sorry, für die vielen Fragen. Aber diesen Eiertanz hier um die eigentliche Lösung, konnte ich nicht mehr mit ansehen. Fangen wir einfach nochmal an, erkläre dein Problem erstmal ausführlich und so, dass auch jemand, der dein System nicht sehen kann, auch versteht, was du da hast und vor allen Dingen, was du eigentlich genau wie haben möchtest. Anderen ist das vielleicht alles klar, mir nicht. Falls dir das zu viele Fragen sind, dann ignoriere mich einfach und ich beschäftige mich nicht weiter mit deinem Problem. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz