2012-04-12 7 views
1

Ich kämpfe mit dieser Frage und möchte wissen, ob ich meine Zeit verschwenden und ein PHP-Skript schreiben muss oder ist etwas wie das Folgende tatsächlich möglich?Erstellen von Variablen und Wiederverwendung innerhalb einer MySQL-Update-Abfrage? möglich?

UPDATE my_table 
SET @userid = user_id 
AND SET filename('http://pathto/newfilename_'@userid'.jpg') 
FROM my_table 
WHERE filename 
LIKE '%_%' AND filename 
LIKE '%jpg'AND filename 
NOT LIKE 'http%'; 

Grundsätzlich ich 700 ungeradee Dateien, die in der Datenbank umbenennen müssen, da sie als I-System am Wechsel nicht die Dateinamen entsprechen, werden sie in der Datenbank genannt. Das Format ist 2_gfhgfhf.jpg was übersetzt userid_randomjumble.jpg

Aber nicht alle Dateien in der Datenbank sind in diesem Format nur etwa 700 von Tausenden. Also ich möchte Namen identifizieren, die _ enthalten, aber nicht enthalten http (das ist das richtige Format, das ich nicht berühren möchte).

Ich kann das gut machen, aber jetzt kommt das knifflige Stück !!

Ich möchte diesen Dateinamen ersetzen userid_randomjumble.jpg mit http://pathto/filename_userid.jpg Also ich möchte die Spalte user_id in dieser Zeile auf eine Variable und fügen Sie es in meinem neuen Dateinamen.

Das obige funktioniert nicht aus offensichtlichen Gründen, aber ich bin mir nicht sicher, ob es einen Weg gibt, um was ich versuche zu tun. Ich habe keine Ahnung, ob es möglich ist? Vergeude ich meine Zeit damit und sollte ich mit mysql zu PHP wechseln und aufhören, faul zu sein? Oder gibt es eine Möglichkeit, dies zum Laufen zu bringen?

+0

'$ sql =" SELECT User_id FROM my_table WHERE Dateiname LIKE '% _%' UND Dateiname LIKE '% jpg' UND Dateiname NICHT LIKE 'http%' "; $ freetplquery = mysql_query ($ sql); while ($ update = mysql_fetch_array ($ freetplquery)) {\t $ userid = $ update ["Benutzer-ID"]; mysql_query ("UPDATE my_table SET user_avatar = 'http: // pathto/newfilename_" $ userid ".jpg..' WHERE user_id =" $ userid ""..);} ' das Drehbuch schrieb, während ich War wie oben so alles jetzt sortiert danke. Bin ich aber immer noch ziemlich interessiert ob es möglich ist ohne PHP zu benutzen? –

Antwort

0

Ja Sie es mit einfachen SQL tun können:

UPDATE my_table 
SET filename = CONCAT('http://pathto/newfilename_', userid, '.jpg') 
WHERE filename LIKE '%\_%jpg' 
AND filename NOT LIKE 'http%'; 

Hinweise:

  • Keine Notwendigkeit für Variablen. Alle Spalten der Zeilen aktualisiert werden können
  • In mysql referenziert werden, CONCAT() verwenden, um Textwerte zusammen
  • Mit LIKE, ein Unterstrich (_) hat eine besondere Bedeutung hinzufügen - es bedeutet „ein beliebiges Zeichen“. Wenn Sie einen wörtlichen Strich übereinstimmen sollen, können Sie es mit einem Backslash muss (\)
  • Ihre zwei LIKE Prädikate sicher fusionierten
  • für eine einfachere Abfrage in eine sein können
+0

Das ist ein großes Dankeschön, ein bisschen spät, da ich PHP am Ende verwendet habe, aber sehr praktisch für zukünftige Referenz. Vielen Dank –

1

Ja, es ist ohne die PHP möglich. Hier ist ein einfaches Beispiel

SET @a:=0; 
SELECT * FROM table WHERE field_name = @a; 
+0

Das wird buchstäblich der Zeichenfolge "@ a" entsprechen. Du meinst 'WHERE field_name = @ a' – Bohemian

+0

@Bohemian, Sorry TYPO ... Danke für den Vorschlag. – Starx