feuerteufel
Goto Top

SUBSTRING in mysql (where bedingung)

Hallo, ich möchte den Befehl SUBSTR in die Where-Bedingung einer Mysqo-Abfrage einbauen, bis jetzt erfolglos.

Nachdem ich jetzt den ganzen Abend versucht habe das hin zu bekommen und Google mir auch keine wirkliche Hilfe war, stelle ich die frage jetzt mal hier.

Ich brauche die SUBSTRING-Funktion in der where-bedingung der mysql-Ausgabe. Und das, obwohl zwei Tabellen mit Join verknüpft sind.

In der Tabelle1 steht in der Spalte user der Wert 'FFFFFFUserid' oder '000000Userid'

In der Tabelle2 steht in der Spalte Userid die Userid, in der Spalte Username eben der Name.


Dazu ist das meiste gesagt. Wenn ich anhand der Chat-Message den Usernamen anzeigen lassen will, dann will ich die beiden Tabellen mit Join verknüpfen - sonst brauche ich ja zwei Select-Abfrage.

PHP-Code:
$query = "SELECT $telegramm.user, $user.userid, $user.username,
FROM $telegramm,$user WHERE $user.userid = $telegramm.user";

Ich habe hier mal bewusst den Befehl SUBSTR weg gelassen, weil es Funktioniert solange die Userid in $telegramm.user eindeutig ist. Aber egal wie ich den SUBSTR-Befehl anwende, es funktioniert nicht. Dann gibt er keinen Wert mehr zurück.


PHP-Code:
$query = "SELECT $telegramm.user, $user.userid, $user.username,
FROM $telegramm,$user WHERE $user.userid = SUBSTR('$telegramm.user',4,4)";

Wie gesagt, alles was ich bisher versucht habe funktioniert nicht. Aber wie kriege ich das hin, wenn ich die beiden Tabellen verknüpfen will?

Gruß
Matthias

Content-ID: 168149

Url: https://administrator.de/contentid/168149

Ausgedruckt am: 05.11.2024 um 16:11 Uhr

Biber
Biber 16.06.2011 um 20:06:39 Uhr
Goto Top
Moin Matthias-Niklasg,

ist ja nicht gerade mein Fachgebiet, aber...
Zitat von @FeuerTeufel:
PHP-Code:
$query = "SELECT $telegramm.user, $user.userid, $user.username,
FROM $telegramm,$user WHERE $user.userid = SUBSTR('$telegramm.user',4,4)";

--> ist es denn so schlau, hier: "...SUBSTR('$telegramm.user',4,4)" ... zu schreiben?

Ich als Laie hätte "... SUBSTR( $telegramm.user, 4, 4)"; geschrieben. Also ohne die einfachen Anführungszeichen.

....aber was verstehen Biber schon von Chatprogrammen...

Grüße
Biber
FeuerTeufel
FeuerTeufel 16.06.2011 um 22:40:28 Uhr
Goto Top
Leider geht es ohne Anführungszeichen auch nicht.
Trotzdem danke für deine Mühe.
Biber
Biber 17.06.2011 um 09:43:23 Uhr
Goto Top
Moin Niklasg,

Frage: bringt denn ein "SELECT $telegramm.user, Substr($telegramm.user, 4, 4) as teilstr From $telegramm" das erwartete Ergebnis bzgl des Teilstrings?

Grüße
Biber
Logan000
Logan000 17.06.2011 um 09:48:17 Uhr
Goto Top
Moin Moin

Versuch ich mal mein Glück.
Ich habe ehrlich gesagt nicht so richtig verstanden was du erwartest was dir Substring hier liefern soll.
Denn für 'FFFFFFUserid' liefert dein SUBSTR ja 'FFFU'. Das soll passen?

Aber ich denke, wenn du einfach mal folgendes Statement
Select $telegramm.user, SUBSTR($telegramm.user,4,4) From $telegramm
auf deiner Datenbank ausführst, solltest du recht schnell (durch drüberschauen) feststellen,
ob Werte vorhanden sind die auch in $user.userid vorkommen.

Gruß L.
FeuerTeufel
FeuerTeufel 17.06.2011 um 15:13:45 Uhr
Goto Top
Moin Biber,

ja dein Beispiel liefert die erwünschten Werte zurück.

Nur das verstehe ich gerade nicht, denn zur Fehleranalyse hatte ich auch eine 'einfache' Select-Abfrage mit Substr erstellt, und selbst die hat nicht funktioniert.
Deshalb war ich schon der Meinung, dass meine Mysql-Version zu alt für diesen Befehl ist.

Aber wie gesagt - dein Beispiel funktioniert bestens.

Ich muss jetzt erst mal weg, danach versuch ich erneut mein Glück;)
Danke für eure Hilfe.

Gruß
Niklasg /Matthias
FeuerTeufel
FeuerTeufel 17.06.2011 um 22:55:51 Uhr
Goto Top
Hi,

ja der Wert FFFFFFUserid würde in etwa so aussehen: FFFFFF264. Userid steht also für eine Userid eines Chat-Teilnehmers. Und genau dese ID brauche ich, um damit den Usernamen auslesen zu können. Deshalb ja auch die Verknüpfung mit Join.


Ich bin zwar noch nicht fertig, aber die Select-Abfrage mit Substr funktioniert schon mal. Also vielen Dank für eure Hilfe!
Ich wüsste zwar nicht was ich heute anders mache als die letzten Tage, aber er liefert die korrekten Usernamen zurück - also die WHEREbedingung mit Substr funktioniert!

Vielen Dank!

Gruß
Niklasg
FeuerTeufel
FeuerTeufel 18.06.2011 um 18:00:10 Uhr
Goto Top
Also jetzt funktioniert alles so wie es soll.
Klappt alles prima!

Vielen Dank nochmal an alle für die Hilfe

Gruß
Niklasg
Biber
Biber 19.06.2011 um 16:49:03 Uhr
Goto Top
Moin Niklasg,

auch wenn der Beitrag schon als "Gelöst" markiert ist.... ich verstehe ebensowenig wie Logan000 wieso das so ist

Im Eröffnungsbeitrag behauptest du
In der Tabelle1 steht in der Spalte user der Wert 'FFFFFFUserid' oder '000000Userid'
In der Tabelle2 steht in der Spalte Userid die Userid,
und auch un deinem Kommentar vom 17.06. nach der Tagesschau sagst du
ja der Wert FFFFFFUserid würde in etwa so aussehen: FFFFFF264.
Daraus lese ich --> die matching Userid ist z.b. die "264" (mal dahingestellt, ob numerisch oder als Text.

WTF kann dann ein "SELECT SUBSTR($telegramm.user, 4, 4) From $telegramm" zu einem "richtigen Ergebnis führen?

Das muss doch dann entweder
SELECT SUBSTR($telegramm.user, 7, 4) From $telegramm
sein, denn "SUBSTR($telegramm.user, 1, 6) From $telegramm" ist doch immer "FFFFFF" oder "000000".

Oder es ist vielleicht auch
SELECT SUBSTR($telegramm.user, -4, 4) From $telegramm
...also die letzten 4 Stellen des Feldes $telegramm.user, FALLS dieses ein CHAR(12)-Feld ist und somit die userids maximal 4stellig.

Gib uns doch nochmal des Rätsels Lösung:
  • welche Datentypen haben $telegramm.user und $user.userid?
  • wie sieht denn jetzt der matchende/übereinstimmende Teil des beiden Felder aus?

Grüße
Biber