Alt 15.11.2011, 18:44:55   #1 (permalink)
Zocko.de - Chef
Benutzerbild von BartTheDevil89

ID: 87739
Lose-Remote

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.865
BartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nett
Standard Fehler: #1690 - BIGINT UNSIGNED value is out of range in...

Hallo zusammen,

seit kurzem spielt mein SQL mir einen Strich von einer alten NestedSet-Klasse, die ich nutze.
Das Ding versucht folgende Abfrage zu machen um das Level eines Eintrags zu ermitteln:
Code:
1:
SELECT baum2.id AS id, COUNT(*) AS level FROM cms_menu_eintrag AS baum1, cms_menu_eintrag AS baum2 WHERE baum2.lft BETWEEN baum1.lft AND baum1.rgt and baum1.menu = '1' and baum2.menu = '1' GROUP BY baum2.lft ORDER BY ABS(baum2.id - 3)
SQL antwortet jetzt mit folgendem Fehler:
Code:
1:
#1690 - BIGINT UNSIGNED value is out of range in '(`cms`.`baum2`.`id` - 3)'
Die Datenbank enthält folgende Daten:

id|lft|rgt|menu
------------------------------
1|0|5|1
3|1|2|1
4|3|4|1

Habt ihr ne Idee, woran das liegen kann bzw. wie ich die Problematik lösen kann?
Danke
digiPo.de - Das digitale Portal für Webmaster mit Lexikon, Tipps & Tricks, Forum, Verkaufsportal...
Zocko.de - kostenlos Flashgames gegen andere User zocken und dabei noch coole Preise gewinnen
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos...
BartTheDevil89 ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 15.11.2011, 18:56:47   #2 (permalink)
alias Echnaton
Benutzerbild von transversalis

ID: 309239
Lose-Remote

Reg: 18.01.2008
Beiträge: 2.399
transversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehen
Standard

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
SELECT baum2.id AS id, COUNT(*) AS level FROM cms_menu_eintrag AS baum1, cms_menu_eintrag AS baum2 WHERE baum2.lft BETWEEN baum1.lft AND baum1.rgt and baum1.menu = '1' and baum2.menu = '1' GROUP BY baum2.lft ORDER BY ABS(baum2.id - 3)
ganz verstehe ich die Query nicht. Ich dachte immer, dass alle Spalten der SELECT-Klausel entweder auch in der Group By Klausel auftauchen müssen oder aber Aggregatsfunktionen sein müssen.
Ist es denn üebrhaupt möglich, baum2.id in der Select-Klausel zu haben und baum2.lft im Group by ?
"transversalis teleport" sprach der Magier und war fort
transversalis ist offline   Mit Zitat antworten
Alt 15.11.2011, 18:57:13   #3 (permalink)
ist maskulin
Benutzerbild von DasGuru

ID: 420909
Lose-Remote
Gesperrt

DasGuru eine Nachricht über ICQ schicken DasGuru eine Nachricht über Skype™ schicken
Reg: 16.08.2008
Beiträge: 1.899
DasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz sein
Standard

ist wohl ein bekannter Bug bzw eine dokumentierte Sache:

versuchs mal mit AS UNSIGNED

Code:
1:
... ORDER BY ABS(baum2.id AS UNSIGNED - 3)
Do not argue with an idiot. He will drag you down to his level and beat you with experience
99%Refback für alle
| Novoline-Spiele | ich zahle meine Schulden |
3 mio Lose + Aktivitätsboni bei eBesucher
| eSig



DasGuru ist offline   Mit Zitat antworten
Alt 15.11.2011, 19:02:19   #4 (permalink)
alias Echnaton
Benutzerbild von transversalis

ID: 309239
Lose-Remote

Reg: 18.01.2008
Beiträge: 2.399
transversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehen
Standard

Zitat:
Zitat von DasGuru Beitrag anzeigen
Code:
1:
... ORDER BY ABS(CAST(baum2.id AS UNSIGNED) - 3)
meinst Du ?
"transversalis teleport" sprach der Magier und war fort
transversalis ist offline   Mit Zitat antworten
Alt 15.11.2011, 19:15:24   #5 (permalink)
ist maskulin
Benutzerbild von DasGuru

ID: 420909
Lose-Remote
Gesperrt

DasGuru eine Nachricht über ICQ schicken DasGuru eine Nachricht über Skype™ schicken
Reg: 16.08.2008
Beiträge: 1.899
DasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz sein
Standard

jepp, natürlich mit CAST()
Do not argue with an idiot. He will drag you down to his level and beat you with experience
99%Refback für alle
| Novoline-Spiele | ich zahle meine Schulden |
3 mio Lose + Aktivitätsboni bei eBesucher
| eSig



DasGuru ist offline   Mit Zitat antworten
Alt 15.11.2011, 19:18:21   #6 (permalink)
Zocko.de - Chef
Benutzerbild von BartTheDevil89

ID: 87739
Lose-Remote

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.865
BartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nett
Standard

Nein, leider nicht wirklich: #1690 - BIGINT UNSIGNED value is out of range in '(cast(`cms`.`baum2`.`id` as unsigned) - 4)'
SELECT baum2.id AS id, COUNT( * ) AS level

Problem ist ja, dass es seit langem funktioniert hat und auch nichts geändert wurde. (höchsten server wurde geändert)
digiPo.de - Das digitale Portal für Webmaster mit Lexikon, Tipps & Tricks, Forum, Verkaufsportal...
Zocko.de - kostenlos Flashgames gegen andere User zocken und dabei noch coole Preise gewinnen
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos...
BartTheDevil89 ist offline Threadstarter   Mit Zitat antworten
Alt 15.11.2011, 19:36:07   #7 (permalink)
alias Echnaton
Benutzerbild von transversalis

ID: 309239
Lose-Remote

Reg: 18.01.2008
Beiträge: 2.399
transversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehen
Standard

Welchen Wertebereich kann denn baum2.ID annehmen ?
Was passiert, wenn Du nach Decimal castest ?

Geht in MySQL sowas wie

Code:
1:
ORDER BY ABS(CAST(baum2.id AS DECIMAL(11)) - 3)
"transversalis teleport" sprach der Magier und war fort
transversalis ist offline   Mit Zitat antworten
Alt 15.11.2011, 19:48:33   #8 (permalink)
ist maskulin
Benutzerbild von DasGuru

ID: 420909
Lose-Remote
Gesperrt

DasGuru eine Nachricht über ICQ schicken DasGuru eine Nachricht über Skype™ schicken
Reg: 16.08.2008
Beiträge: 1.899
DasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz seinDasGuru kann auf vieles stolz sein
Standard

ähh. Sorry, ich denke so ist es richtiger

Code:
1:
ORDER BY ABS(CAST(baum2.id AS SIGNED) - 3)
zumindest erklärt das die Fehlerbeschreibung (nach Serverwechsel) da der Bug in mySQL 5.5 bekannt ist

Laut dem obigen Beispiel sollte auch schon ein INT oder TINYINT ausreichen. und ID als PrimaryKey könnte man sowieso als INT setzen, soweit mir das bekannt ist
Do not argue with an idiot. He will drag you down to his level and beat you with experience
99%Refback für alle
| Novoline-Spiele | ich zahle meine Schulden |
3 mio Lose + Aktivitätsboni bei eBesucher
| eSig



DasGuru ist offline   Mit Zitat antworten
Alt 15.11.2011, 21:40:18   #9 (permalink)
Zocko.de - Chef
Benutzerbild von BartTheDevil89

ID: 87739
Lose-Remote

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.865
BartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nettBartTheDevil89 ist einfach richtig nett
Standard

Zitat:
Zitat von dasguru Beitrag anzeigen
ähh. Sorry, ich denke so ist es richtiger

Code:
1:
order by abs(cast(baum2.id as signed) - 3)
zumindest erklärt das die fehlerbeschreibung (nach serverwechsel) da der bug in mysql 5.5 bekannt ist

laut dem obigen beispiel sollte auch schon ein int oder tinyint ausreichen. Und id als primarykey könnte man sowieso als int setzen, soweit mir das bekannt ist
1000dank
digiPo.de - Das digitale Portal für Webmaster mit Lexikon, Tipps & Tricks, Forum, Verkaufsportal...
Zocko.de - kostenlos Flashgames gegen andere User zocken und dabei noch coole Preise gewinnen
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos...
BartTheDevil89 ist offline Threadstarter   Mit Zitat antworten
Alt 15.11.2011, 21:55:32   #10 (permalink)
return void
Benutzerbild von ice-breaker

ID: 93995
Lose-Remote

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.026
ice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehen
Standard

Zitat:
Zitat von transversalis Beitrag anzeigen
ganz verstehe ich die Query nicht. Ich dachte immer, dass alle Spalten der SELECT-Klausel entweder auch in der Group By Klausel auftauchen müssen oder aber Aggregatsfunktionen sein müssen.
Ist es denn üebrhaupt möglich, baum2.id in der Select-Klausel zu haben und baum2.lft im Group by ?
MySQL kann das irgendwie, frag mich nicht warum, ich glaube das gruppiert dann autom. oder so. Lässt sich aber auch ausstellen und somit verhält sich dann MySQL wie jede andere relationale Datenbank.


"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici
ice-breaker ist offline   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] casten von bigint Benutzer-2472 Programmierung 21 14.07.2009 15:30:48
[VBA] Range und Format - Verständnisfrage DelphiKing Programmierung 2 04.11.2008 10:10:04


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27:25 Uhr.