將標題重寫為:使用變數取得MySQL欄位名稱
P粉237647645
P粉237647645 2023-10-20 09:39:08
0
2
634

是否可以選擇名稱為字串的欄位?

從表格中選擇「欄位名稱」

我需要這個觸發器才能具有動態欄位名稱 類似的東西

SET fieldname = NEW.`name`;
UPDATE table SET fieldname = 1 ;


#
P粉237647645
P粉237647645

全部回覆(2)
P粉986028039

正如這些正確答案的提示一樣,您也可以在預存程序中執行此操作,這在 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粉190443691

如果該字串位於您的外部應用程式(例如 PHP)中,當然,只需建構 MySQL 語句即可。

如果字串位於 MySQL 表內,則不能。 MySQL 沒有 eval() 或此類函數。以下是不可能的:

假設您有一個表格 queries,其中的欄位 columnname 引用表 mytable 中的欄位名稱之一。 查詢中可能有其他列,讓您可以選擇所需的列名

INSERT INTO queries  (columname) VALUES ("name")
SELECT (select columnname from queries) from mytable

但是,您可以使用準備好的語句.請注意,這非常 hacky。

SELECT columnname from queries into @colname;
SET @table = 'mytable';
SET @s = CONCAT('SELECT ',@colname,' FROM ', @table);

PREPARE stmt FROM @s;
EXECUTE stmt;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!