Wenn ich versuche, diese Abfrage in Access über die ODBC-Schnittstelle in eine MySQL-Datenbank auszuführen, bekomme ich einen Fehler "Ausdruck zu komplex in Abfrageausdruck". Das Wesentliche, was ich versuche, ist es, abgekürzte Namen von Sprachen in ihre englischen Gegenstücke zu übersetzen. Ich war neugierig, ob es einen Weg gab, den Zugang zu "tricksen", um zu denken, dass der Ausdruck mit Unterabfragen kleiner ist, oder ob jemand anders eine bessere Vorstellung davon hatte, wie man dieses Problem lösen könnte. Ich habe darüber nachgedacht, eine temporäre Tabelle zu erstellen und einen Join durchzuführen, aber das wird in Access SQL nicht unterstützt.Ausdruck zu komplex in Access 2007
Nur als ein FYI, die Abfrage funktionierte gut, bis ich die große lange IFF-Kette hinzugefügt. Ich testete die Abfrage auf einer kleineren IFF-Kette für drei Sprachen, und das war kein Problem, so stammt das Problem definitiv von der großen IFF-Kette (Es ist 26 tief). Auch könnte ich in der Lage sein, einige der Optionen zu löschen (wie die verschiedenen Formen von Chinesisch oder Portugiesisch zu kombinieren)
Als Test konnte ich die SQL-Abfrage zu arbeiten, nachdem es auf 14 IFF() Aussagen, aber das ist weit entfernt von den 26 Sprachen, die ich darstellen möchte.
SELECT TOP 5 Count(*) AS [Number of visits by language], IIf(login.lang="ar","Arabic",IIf(login.lang="bg","Bulgarian",IIf(login.lang="zh_CN","Chinese (Simplified Han)",IIf(login.lang="zh_TW","Chinese (Traditional Han)",IIf(login.lang="cs","Czech",IIf(login.lang="da","Danish",IIf(login.lang="de","German",IIf(login.lang="en_US","United States English",IIf(login.lang="en_GB","British English",IIf(login.lang="es","Spanish",IIf(login.lang="fr","French",IIf(login.lang="el","Greek",IIf(login.lang="it","Italian",IIf(login.lang="ko","Korean",IIf(login.lang="hu","Hungarian",IIf(login.lang="nl","Dutch",IIf(login.lang="pl","Polish",IIf(login.lang="pt_PT","European Portuguese",IIf(login.lang="pt_BR","Brazilian Portuguese",IIf(login.lang="ru","Russian",IIf(login.lang="sk","Slovak",IIf(login.lang="sl","Slovenian","IIf(login.lang="fi","Finnish",IIf(login.lang="sv","Swedish",IIf(login.lang="tr","Turkish","Unknown")))))))))))))))))))))))))) AS [Language]
FROM login, reservations, reservation_users, schedules
WHERE (reservations.start_date Between DATEDIFF('s','1970-01-01 00:00:00',[Starting Date in the Following Format YYYY/MM/DD]) And DATEDIFF('s','1970-01-01 00:00:00',[Ending Date in the Following Format YYYY/MM/DD])) And reservations.is_blackout=0 And reservation_users.memberid=login.memberid And reservation_users.resid=reservations.resid And reservation_users.invited=0 And reservations.scheduleid=schedules.scheduleid And scheduletitle=[Schedule Title]
GROUP BY login.lang
ORDER BY Count(*) DESC;
@ Michael Todd
bin ich völlig einverstanden. Die Liste der Sprachen sollte eine Tabelle in der Datenbank sein und die login.lang sollte ein FK in dieser Tabelle sein. Leider wurde die Datenbank nicht so geschrieben, und es ist nicht meine Aufgabe, sie zu modifizieren. Die Sprachen werden in das Feld login.lang gestellt, indem PHP über der Datenbank läuft.
Warum nicht einfach eine Nachschlagetabelle mit den Sprachwerten verwenden und dann in Ihre Abfrage aufnehmen? Es muss keine temporäre Tabelle sein (eigentlich sollte es eine permanente sein). –
Ich stimme Michael Todd vollkommen zu. Es sollte in der Tat sehr einfach sein, eine Tabelle mit Sprachkürzel und vollem Namen einzurichten. – Fionnuala