Heim  >  Artikel  >  Datenbank  >  So teilen Sie eine Zeichenfolge entsprechend den angegebenen Zeichen in MySQL auf

So teilen Sie eine Zeichenfolge entsprechend den angegebenen Zeichen in MySQL auf

WBOY
WBOYnach vorne
2023-06-03 14:00:134461Durchsuche

Vorwort

In einigen Szenarien (z. B. wenn Benutzer Dateien oder Bilder hochladen usw.) besteht der allgemeine Ansatz darin, die Dateiinformationen (Dateiname, Dateipfad, Dateigröße usw.) in der Dateitabelle (Benutzerdatei) zu speichern. und dann werden die IDs aller vom Benutzer hochgeladenen Dateien mit einem angegebenen Zeichen verkettet und dann in einem Feld in der Tabelle (Benutzer) gespeichert (angenommen: file_ids).
Wenn Sie von Benutzern hochgeladene Dateien anzeigen, fragen Sie einfach die Dateitabelle direkt ab:

-- 一般的语句是这样的,假设用户唯一键是id
select * from file where id in(select file_ids from user where id = 1);

Es gibt kein Problem mit der SQL-Anweisung, und die Dateien können mit dieser SQL-Anweisung auch abgefragt werden, nachdem die hochgeladene Datei größer als 1 ist Nur abfragen Nachdem Sie einen Datensatz zurückgegeben haben, fragen Sie sich möglicherweise, warum nur ein Datensatz zurückgegeben wird. ? ? ;

Jemand muss eine solche Überprüfung durchgeführt haben

-- 先运行下面这个sql,正确返回1,2,3 假设上传的文件id是1,2,3;
select file_ids from user where id = 1
-- 然后返回的文件id写死在sql语句中,运行成功返回3条记录
select file_ids from user where id in ('1' , '2' , '3');
-- 最后再整体试了下,结果返回一条......
select * from file where id in(select file_ids from user where id = 1)

-- 然后可能会想到:我把in里面的拼接成'1','2','3',这样总可以了吧?
select * from file where id in (select concat('\'', replace(file_ids,',','\',\'') ,'\'') from user where id = 1);
-- concat('\'', replace(file_ids,',','\',\'') ,'\'') 确实能拼接成上面说的形式,但是结果还是只有一条

Der Grund dafür ist, dass diese Abfrage nur ein Feld zurückgibt, sodass nur ein Datensatz zurückgegeben wird (auch wenn mehrere Kommas zusammengefügt oder manuell zusammengefügt werden, berücksichtigt MySQL dies nur Um einen Wert zu sein, insbesondere Die unterste Ebene ist nicht klar ...), der richtige Ansatz ist wie folgt:

Eins: Zweimal abfragen (nicht der Schwerpunkt dieses Artikels, aber es kann implementiert werden)

select file_ids from user where id = 1

select file_ids from user where id in ('1' , '2' , '3');
或者
select file_ids from user where find_in_set(id , '1,2,3');

Zwei : Teilen Sie das Feld „file_ids“ in mehrere Spalten auf, ähnlich der Zeilen-zu-Spalten-Konvertierung von MySQL Sie müssen nur die Verbindungszeichen kennen

-- 下面语句将会把1,2,3,4一个字段转换成四行,依次是1,2,3,4
SELECT
	a.id,
	a.file_ids,
	substring_index(
		substring_index(
			a.file_ids,
			',',
			b.help_topic_id + 1
		),
		',' ,- 1
	) file_id
FROM
	user a
JOIN mysql.help_topic b ON b.help_topic_id < (
	length(a.file_ids) - length(REPLACE(a.file_ids, &#39;,&#39;, &#39;&#39;)) + 1
)
where id = 1
;
-- 然后将上面语句写在in()里面就行了,写在in()里面的话记住只能查询一个字段哦!

Die obige Anweisung kann direkt kopiert werden. Ersetzen Sie einfach die Felder „a table“ und „a table“ durch Ihre eigenen Mach dir darüber keine Sorgen.

Anhang: Wie teilt MySQL eine Zeichenfolge nach Trennzeichen auf? 1. Zeichenfolgenaufteilung: SUBSTRING_INDEX (Druck 136/70 Blutdruck), zum Beispiel:

SUBSTRING_INDEX(pressure ,&#39;,&#39;,1)     #截取第一个逗号(,)号以前的字符串
SUBSTRING_INDEX(pressure ,&#39;,&#39;,-1)    #截取倒数第一个逗号(,)号以后的字符串

2. Ersetzungsfunktion: replace(str, from_str, to_str) . Zum Beispiel:

UPDATE bgs_building_copy1 SET `name`=replace(`name`,&#39;=&#39;,"");    #替换等号为空字符串

Das obige ist der detaillierte Inhalt vonSo teilen Sie eine Zeichenfolge entsprechend den angegebenen Zeichen in MySQL auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen