Rumah > Soal Jawab > teks badan
Adakah mungkin untuk memilih medan dengan nama rentetan?
Pilih "Nama Medan" dalam从表
Saya memerlukan pencetus ini untuk mempunyai nama medan dinamik Sesuatu yang serupa
SET fieldname = NEW.`name`; UPDATE table SET fieldname = 1 ;
P粉9860280392023-10-21 00:17:14
Seperti yang dicadangkan oleh jawapan yang betul ini, anda juga boleh melakukan ini dalam prosedur tersimpan, yang berfungsi hebat untuk saya dalam komuniti MySQL 8x:
CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `SP_LIST_COLLECTORS`( IN P_email VARCHAR(60),#Admin email IN P_password_hash VARCHAR(255),#Admin hash IN P_filter_field VARCHAR(80), IN P_filter_value VARCHAR(255) ) BEGIN DECLARE V_filter_field VARCHAR(80); SET V_filter_field = P_filter_field; BEGIN GET DIAGNOSTICS CONDITION 1 @ERRNO = MYSQL_ERRNO, @MESSAGE_TEXT = MESSAGE_TEXT; SELECT 'ERROR' AS STATUS, CONCAT('MySQL ERROR: ', @ERRNO, ': ', @MESSAGE_TEXT) AS MESSAGE; END; SET @statement = CONCAT('SELECT collector_id, email, address, post_code, phone, alt_phone, contact_name FROM collectors_table WHERE ',P_filter_field, '=\'', P_filter_value, '\';'); #SELECT collector_id, email, address, post_code, phone, alt_phone, contact_name FROM collectors_table WHERE (V_filter_field) = P_filter_value; PREPARE stmnt FROM @statement; EXECUTE stmnt; END
P粉1904436912023-10-21 00:09:50
Jika rentetan berada dalam aplikasi luaran anda (seperti PHP), sudah tentu, bina penyata MySQL sahaja.
Tidak jika rentetan berada di dalam jadual MySQL. MySQL tidak mempunyai eval() atau fungsi sedemikian. Perkara berikut adalah mustahil:
Andaikan anda mempunyai meja queries
,其中的字段 columnname
引用表 mytable
中的列名称之一。 查询
中可能有其他列,允许您选择所需的列名
.
INSERT INTO queries (columname) VALUES ("name") SELECT (select columnname from queries) from mytable
Walau bagaimanapun, anda boleh menggunakan penyata yang disediakan< /a> Ambil perhatian bahawa ini sangat meretas.
SELECT columnname from queries into @colname; SET @table = 'mytable'; SET @s = CONCAT('SELECT ',@colname,' FROM ', @table); PREPARE stmt FROM @s; EXECUTE stmt;