我有一個看起來像這樣的數據庫。基於列名的PHP/MySQL匹配單元格
x 2 3 4 5
4 8 12 16 20
5 10 15 20 25
6 12 18 24 30
7 14 21 28 35
當一個值的終端用戶插頭欲x變量的值相匹配的x列和其他變量的數值列名。
那麼我該如何去編寫一個SQL查詢來做到這一點?
SELECT * FROM times_tables WHERE x=4 and COLUMN_NAME=4;
謝謝:)
我有一個看起來像這樣的數據庫。基於列名的PHP/MySQL匹配單元格
x 2 3 4 5
4 8 12 16 20
5 10 15 20 25
6 12 18 24 30
7 14 21 28 35
當一個值的終端用戶插頭欲x變量的值相匹配的x列和其他變量的數值列名。
那麼我該如何去編寫一個SQL查詢來做到這一點?
SELECT * FROM times_tables WHERE x=4 and COLUMN_NAME=4;
謝謝:)
SELECT
`4`
FROM
(SELECT
4 as `x`, 8 as `2`, 12 as `3`, 16 as `4`, 20 as `5`
UNION ALL
SELECT 5, 10, 15, 20, 25
UNION ALL
SELECT 6, 12, 18, 24, 30
UNION ALL
SELECT 7, 14, 21, 28, 35) `times_tables`
WHERE
`x` = 4
輸出:
4
---
16
所以你的情況的查詢可能是這樣的:
SELECT `{$col}` FROM `times_tables` WHERE `x` = {$row};
UPD:
可能與純SQL來完成:
SET @r = 4; -- row
SET @c = 5; -- col
SET @qry = CONCAT('SELECT `', @c ,'` FROM `times_tables` WHERE `x` = ', @r);
PREPARE stmt FROM @qry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
P.S:,你可以換到SQL存儲過程中得到更好的保護。
我討厭問,但你爲什麼這樣做? – NullRef
** @NullRef **,如果'times_tables'是一個多對多的關聯表,我認爲這樣做會更容易。我建議OP將「表格重組」視爲一種選擇。 – BlitZ
@CORRUPT甚至是一個帶X Y和PRODUCT的3列表將更容易處理。 – NullRef