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-Key: 168149

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

Printed on: April 24, 2024 at 12:04 o'clock

Member: Biber
Biber Jun 16, 2011 at 18:06:39 (UTC)
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
Member: FeuerTeufel
FeuerTeufel Jun 16, 2011 at 20:40:28 (UTC)
Goto Top
Leider geht es ohne Anführungszeichen auch nicht.
Trotzdem danke für deine Mühe.
Member: Biber
Biber Jun 17, 2011 at 07:43:23 (UTC)
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
Member: Logan000
Logan000 Jun 17, 2011 at 07:48:17 (UTC)
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.
Member: FeuerTeufel
FeuerTeufel Jun 17, 2011 at 13:13:45 (UTC)
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
Member: FeuerTeufel
FeuerTeufel Jun 17, 2011 at 20:55:51 (UTC)
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
Member: FeuerTeufel
FeuerTeufel Jun 18, 2011 at 16:00:10 (UTC)
Goto Top
Also jetzt funktioniert alles so wie es soll.
Klappt alles prima!

Vielen Dank nochmal an alle für die Hilfe

Gruß
Niklasg
Member: Biber
Biber Jun 19, 2011 at 14:49:03 (UTC)
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