2014-10-22 38 views
1

我有一個包含77個字段的MySQL表。其中許多人開始使用相同的前綴「mt3_」。 而不是寫大家都出去了,我想用這個語法,只選擇表中以「mt3_」啓動這些領域:選擇在MySQL中具有共同開始短語的所有字段

SELECT tablename.mt3_* from tablename; 

然而,這並不工作...什麼是正確的語法做這個?

謝謝。

+0

沒有。選擇所有列或命名您想要選擇的列 – 2014-10-22 01:03:10

+0

@juergend有一種方法,現在就寫一個答案。 – worldofjr 2014-10-22 01:04:03

+0

@worldofjr動態SQL? – ForguesR 2014-10-22 01:04:48

回答

1

你不能直接這樣做,但你可以向MySQL索取該表中的列名,並在WHERE語句中使用通配符%進行過濾,就像這樣;你可以運行另一個查詢,這些結果的循環(我猜你正在使用PHP和mysqli);然後,

while($row = $result->fetch_assoc()) { 
    $cols[] = $row['column_name']; 
} 

$colnames = explode(",",$cols); 

$sql = "SELECT $colnames FROM tablename" 

希望這會有所幫助。

+0

我沒有使用PHP,但是使用Python,儘管在這項工作中我直接用mysql來做所有事情。我理解第一部分。我可以在mysql中使用第二部分,或者我會怎麼做 - 用PHP我猜...? – oaklander114 2014-10-22 02:36:54

+0

啊Python ...'「SELECT * FROM tablename WHERE」+''.join(['%s = 1'%name for columns in columns]) – worldofjr 2014-10-22 02:43:34

+0

我不認爲沒有使用某種程序語言(或者只是輸入列名)。 – worldofjr 2014-10-22 02:58:06

1

沒有動態SQL沒有辦法做到這一點,老實說,我不能推薦做這樣的事情。

如果你足夠關心SELECT只有某些字段,那麼你也可能足夠關心在乎的最佳實踐,這是一個best practice指定所有你想一個SELECT查詢中的字段。

使用SELECT *進行單個快速檢索。如果你實際上是編碼的東西,然後花時間來指定你想要的領域。

相關問題