SQL SQL Abfrage bei Buchstaben und Zahlen funktionslos --> leeres Resultat

Plankokan

Ensign
Dabei seit
Mai 2008
Beiträge
187
Hallo,
habe für die meisten unter euch bestimmt ein leicht zu lösendes Problem. Habe eine MySQL Datenbank welche 4 Spalten hat und in der letzten Spalte jeweils die ID der Zeile steht, welche z.b. so aussieht: "3B3CDED4A6969DB7CB9EA905" (ohne "").

Als Datentyp habe ich schon VARCHAR sowie TEXT probiert. Beides endet bei untem stehendem Befehl einem leerem Resultat obwohl diese Kombination aber vorhanden ist...

Code:
SELECT ID 
FROM Tabelle 
WHERE ID = "3B3CDED4A6969DB7CB9EA905"
Übrigens: Ersetzte ich die ID nur durch Buchstaben oder Zahlen funktioniert die Abfrage. Wie ist es möglich die Mischung aus beiden Abzufragen?

Wäre super wenn mir da jemand helfen könnte!

Gruß,
Picola
 

Plankokan

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2008
Beiträge
187
Naja mit Kombination meine ich die Zufällige ID.

Auszug der Spalten und einer Zeile. Projekt ist ein Vokabeltrainer.

Text | Text | Text | Text (Datentypen)
Lektion | Fremdsprache | Deutsch | ID
L1 - T1 | certo | sicher | F847B10F051C26C953BC612E
L1 - T2 | il gatto | Katze | 3B3CDED4A6969DB7CB9EA905

SELECT *
FROM Tabelle
WHERE ID = "3B3CDED4A6969DB7CB9EA905"

Dieser Befehl sollte mir doch die untere Zeile ausgeben, bekomme allerdings ein leeres Ergebnis
 

volcem

Lieutenant
Dabei seit
Dez. 2007
Beiträge
995
Hast Du mal geschaut ob die ID ausgegeben werden kann?

Also ob der string = string ist?

Lass Dir mal alles ausgeben, normal müsste die WHERE Klausel ohne Probleme gehen.
 

Plankokan

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2008
Beiträge
187
@volcem
Wie meinst du das genau? Die Ausgabe ohne die WHERE Klausel funktioniert und ich bekomme alles Zeilen inklusive aller ID's angezeigt.

@philippgerard
Mit Buchstaben habe ich mehr Kombinationen als nur mit Zahlen und es kommt somit nicht so oft vor dass Kombinationen Doppelt vorkommen --> Weniger Arbeit für den Server zu prüfen ob diese schon vorhanden ist bei einem hinzufügen einer Vokabel
 

cx01

Ensign
Dabei seit
Mai 2010
Beiträge
242
Also ich hab grad mal testweise eine Tabelle nach deinem Schema angelegt und dieselben Werte eingetragen und hier geht es.
Für deinen Einsatzzweck würde ich aber eher eine numerische ID nehmen und da halt einstellen, dass er die automatisch erhöht. Dann sind Kollisionen ausgeschlossen.
 

Plankokan

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2008
Beiträge
187
Könnte das dann an dem Server liegen? Habe einen Webspace bei Netcup. Abfrage hab ich bis jetz testweise immer mit MyPhpAdmin gemacht.

Und wie meinst du dann genau immer um eins erhöhen? Das würde dann bei über 2000 Vokabeln ins Uferlose laufen...
 

cx01

Ensign
Dabei seit
Mai 2010
Beiträge
242
Hm kann sein, dass da ein altes MySQL läuft, das fehlerhaft ist. Du kannst ja mal als Query folgendes eingeben:
Code:
select "3B3CDED4A6969DB7CB9EA905"="3B3CDED4A6969DB7CB9EA905"
Da müsste er dann 1 liefern.

Du willst doch, dass jede Zeile eine eindeutige ID hat, oder? Das kannst du bei MySQL einstellen, dass er dann automatisch für jede eingefügte Zeile eine neue ID anlegt. Du brauchst dich also garnicht mehr drum kümmern, IDs zu generieren.
 

Plankokan

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2008
Beiträge
187
Das Wäre natürlich Ideal, hast du da für mich das dazugehörige Script? Die Zeit von MySql zu Schulzeiten ist schon etwas länger entfernt :D

Anhang:

SELECT "3B3CDED4A6969DB7CB9EA905" = "3B3CDED4A6969DB7CB9EA905"
FROM vokabeltrainer

Da bekomm ich dann 992x (Anzahl aller bis jetz vorhandenen Vokabeln) die 1 ausgegeben
 

philippgerard

Lt. Junior Grade
Dabei seit
Jan. 2004
Beiträge
266
Zahlen sind sehr viel performanter in der Abfragegeschwindigkeit und haben zahllose andere Vorteile (auto_increment uvm.). Ich würde Deine Wahl wirklich überdenken, so viele Vokabeln wie int(11) wirst Du eh nicht im Deinem Skriptlein haben.
 

AlbertLast

Lieutenant
Dabei seit
Juni 2002
Beiträge
715
ich denke in deiner id sind irgendwelche unsichtbaren sonderzeichen wie leerzeichen drin.

Code:
select id from tabelle
where
lower(name) = 'katze';
sollte dir ja eine id zurückgeben und daher sollte dann auch :
Code:
select id from tabelle
where 
id = (select id from tabelle where
        lower(name) = 'katze');
funktionieren
 

Cobinja

Lt. Junior Grade
Dabei seit
Juli 2006
Beiträge
454
Da sind vermutlich keine Sonderzeichen drin.

@Picola: Benutz' in deinem SQL-Statement mal die einfachen Anführungszeichen ' statt den doppelten ". Klappt es dann?
 

Plankokan

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2008
Beiträge
187
@Cobinja

Funktioniert leider auch nicht :(

@AlbertLast

Das funktioniert, ich bekomme bei beiden die ID ausgegeben, allerdings funktioniert so mein Vorhaben nicht die Zeile nach der ID zu suchen und zu löschen... Und da es ja vorkommen kann das Deutsche Wörter oder Lektionen öfter vorkommen dachte ich mir das sich das mit den ID's besser lösen lässt. Ebenso beim Ändern eines Wertes.
 

Madman1209

Fleet Admiral
Dabei seit
Nov. 2010
Beiträge
26.244
Hi,

Mit Buchstaben habe ich mehr Kombinationen als nur mit Zahlen und es kommt somit nicht so oft vor dass Kombinationen Doppelt vorkommen --> Weniger Arbeit für den Server zu prüfen ob diese schon vorhanden ist bei einem hinzufügen einer Vokabel
Also bei einem Vokabeltrainer sollte eine "id" mit "int", "AutoInc" und "Not Null" MEHR als genügen. Diese Unique-IDs / GUIDs sind was nettes, allerdings handelt man sich damit gerne mal Performanceprobleme, Abfrageprobleme oder Ähnliches ein.

Hatte hier auf Arbeit gerade so einen Fall in MSSQL, da wurde auch mit UIDs gearbeitet, die mussten dann zur Abfrage / für den Vergleich umständlich auf string gecastet werden und danach wieder auf GUID - MEHR als dämlich, umständlich und unperformant.

Falls es dir möglich ist stelle einfach auf eine "normale" id um, wenn nicht => weitere Antworten abwarten.

VG,
Mad
 

Plankokan

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2008
Beiträge
187
Danke für eure Hilfe, werde nun denke ich die Variante mit dem Auto Increase verwenden!
 
Top