Autor | axe |
Datum | 01.05.2007 22:42 |
Beiträge: | Hi,
wenn ich im Download-Modul unter Admin auf Downloads klicke bekomm ich einen SQL Fehler. Das Select Statement ist SELECT lid , lid, title, url, user_group FROM opn_downloads_links ORDER BY lid ASC 2x lid kann nicht passen !?? in V 2.4.4 war dieses statement in der ....admin/index.php wo es in V 2.4.6 hingewandert ist konnt ich noch nicht finden. Gruß Alex |
Autor | axe |
Datum | 01.05.2007 23:16 |
Beiträge: | ok, bin jetzt fündig geworden:
in .../modules/download/admin/index.php wird definiert $dialog->settable ( array ( 'table' => 'downloads_links', 'show' => array ( // 'lid' => _DOWN_DLID, 'title' => _DOWN_PAGETITLE, 'url' => _DOWN_PAGEURL, 'user_group' => _DOWN_USERGROUP), 'type' => array ( 'url' => _OOBJ_DTYPE_URL, 'user_group' => _OOBJ_DTYPE_USERGROUP), 'id' => 'lid') ); und in class/engine/gui_engine/gui_part/class.gui_listbox.php wird mit $select_feld = $this->_data['_table']['id'] . ' '; $ar = array(); foreach ($this->_data['_table']['show'] as $key => $val) { das lid Attribut doppelt ins SELECT statement eingebaut. Ich geh mal davon aus dass das lid Attribut im show-array redundant ist, das bereits im id Array mit drin !? Hab das bei mir auskommentiert, dann geht auch wieder die Auflistung der Downloads. Gruß Alex |
Autor | axe |
Datum | 01.05.2007 23:20 |
Beiträge: | Noch ein Nachtrag:
ist leider doch nicht so einfach, aus dem show-Array kann man das Attribut nicht rausnehmen, sonst fehlt der Spaltentitel in der erstellten Listbox und aus dem id array kann man es auch nicht rausnehmen, da dieses für SELECT COUNT(...)... verwendet wird :/ => class.gui_listbox.php anpassen !?? |
Autor | stefan |
Datum | 02.05.2007 05:31 |
Beiträge: | hmm... ich kann den fehler hier nicht reproduzieren, wie kann ich den erzeugen. weil ob da 2 lid drin sind dürfte nicht die ursache sein.
lad dir mal die aktuelle class.gui_listbox.php aus dem branch, ist das dann immer noch, also der SQL Fehler? kann man das auf larborcenter nach stellen? |
Autor | axe |
Datum | 02.05.2007 09:31 |
Beiträge: | Hallo Stefan,
meine Vermutung dass Du es nicht nachstellen kannst dürfte MySQL sein ich denke mal MySQL stört sich nicht wenn in einem Select ein Attribut doppelt vorkommt. Mit Firebird gehts nicht, hab das besagte Select SELECT lid , lid, title, url, user_group FROM opn_downloads_links ORDER BY lid ASC mal manuell in der DB abgesetzt: Undefined name. Dynamic SQL Error. SQL error code = -204. Ambiguous field name between a field and a field in the select list with name. LID. Funktionieren würde dieses SELECT nur in der Form: SELECT lid as lid_a , lid as lid_b, title, url, user_group FROM opn_downloads_links ORDER BY lid_a ASC Das entspräche auch dem ANSI-SQL Standard. Werd das mal testen ob MySQL da einfach toleranter dem Standard gegenüber ist. Gruß Alex Nachtrag: Wie vermutet ist es so, MySQL stört sich nicht an doppelten Attributen in einem Select - sauberes SQL ist es aber nicht. Sollte man daher nachdenken wie man es ändern könnte. werd es mal noch mit mssql und oracle testen.... [ Diese Nachricht wurde bearbeitet von: axe am 02.05.2007 09:39 (Originaldatum 02.05.2007 09:31) ] |
Autor | axe |
Datum | 02.05.2007 10:03 |
Beiträge: | Ok, MSSQL und Oracle akzeptieren auch doppelte identische Attribute in einem Select :/ schade, dann muss ich wohl schauen im DB driver das wieder auszufiltern....
Falls dies hier ein regular expressions Experte liest, gibt es da eine Möglichkeit doppelte Wörter in einem String zu erkennen und entfernen?? Gruß Alex |
Autor | axe |
Datum | 02.05.2007 10:14 |
Beiträge: | Nächste Korrektur:
MSSQL meldet doch auch einen Fehler: Meldung 209, Ebene 16, Status 1, Zeile 1 Ambiguous column name 'tp_WebId'. Funktionieren tut nur ein SELECT a,a,b FROM mytable Das geht auch mit Firebird. aber sobald ein ORDER BY a dazu kommt gibt es mit MSSQL und Firebird einen Fehler da das ORDER by Attribut eben nicht eindeutig ist. Jetzt stehts 2:2 MySQL geht Oracle geht Firebird geht nicht MSSQL geht nicht Postgres muss ich mal schauen ob ich da eine Installation zum testen hab. -> PostgreSQL funktioniert es. Gruß Alex [ Diese Nachricht wurde bearbeitet von: axe am 02.05.2007 10:43 (Originaldatum 02.05.2007 10:14) ] |
Autor | stefan |
Datum | 02.05.2007 12:55 |
Beiträge: | ui ui ui
Du fängst an mich zu begeistern Testest eben mal paar SQL DBs Du weisst schon das wenn man zeigt was man kann gnadenloss gefordert wird Wie auch immer wenn das so ist hast du 100% recht das es geändert werden muss, sollte auch nicht das problem sein das in der classe (nicht db) zu ändern sqlite geht auch class.gui_listbox.php muss da angepasst werden das das id feld nicht noch mal extra in das select kommt wenn ein feld = id schon vorhanden ist. sollte da im aufbau aber kein problem sein |
Autor | axe |
Datum | 02.05.2007 13:07 |
Beiträge: | supi, weil das wäre auch meine Präferenz das in der gui_listbox class anzupassen.
tendentiell würde ich _data['_table']['id'] gar nicht mit ins select nehmen, sondern immer nur das was in _data['_table']['show'] steht. dann muss man aber darauf achten, dass die 'id' attribute auch immer mit im 'show' array stehen. in modules/weblogs/admin/index.html ist dies z.B. nicht der Fall 'show' => array ( 'title' => _WEB_LINKNAME, 'homepage' => _WEB_URL), 'showfunction' => array ( 'homepage' => $homepage_visible_func), 'id' => 'lid') ); aber naja, gibt da sicher mehrere Möglichkeiten die sich vom Aufwand in Grenzen halten. |
Autor | stefan |
Datum | 02.05.2007 18:09 |
Beiträge: | so mit rev. trunk 769 mal geändert sollte so gehen
http://websvn.openphpnuke.info/diff.php?repname=openPHPnuke&path=%2Ftrunk%2Fopenphpnuke%2Fhtml%2Fclass%2Fengine%2Fgui_engine%2Fgui_part%2Fclass.gui_listbox.php&rev=0&sc=1 |
Autor | axe |
Datum | 02.05.2007 19:46 |
Beiträge: | Supi, funktioniert jetzt danke |
Diese Seite drucken Diese Seite schließen |
Dieser Artikel kommt von: OpenPHPNuke - das Open Source CMS |
http://www.openphpnuke.info/ |