2014-06-27 69 views
-3

請幫我理解如何在php中優化mysql查詢。當你有很多的列,備言看起來像INSERT INTO準備好的語句,PHP MYSQL,優化了很多列

$inst = $db->prepare("insert into year_$year (user_name,type_of_day,month_row,day_1,day_2,day_3,day_4,day_5,day_6,day_7,day_8,day_9, 
day_10,day_11,day_12,day_13,day_14,day_15,day_16,day_17,day_18,day_19,day_20,day_21,day_22,day_23,day_24,day_25,day_26,day_27,day_28,day_29,day_30,day_31) 
values 
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); 

$inst->execute($chunk_post[$init]); 

這個代碼是從這裏:http://govnokod.ru/php?page=356 人們嘲笑低劣的代碼。

我不明白如何以其他方式做到這一點。

+0

什麼是你不明白?出現了什麼問題? – LinkinTED

+0

請詳細閱讀「數據庫標準化」 –

回答

0

一個小笑話:

u可以使用for ($i = 1; $i <= 31; i++) {}來構建你的查詢;)

的現實:

閱讀有關數據庫規範化這裏:http://databases.about.com/od/specificproducts/a/normalization.htm

你的終極目標應該是第三範式。

你應該考慮一些鏈接到一個月的日子。

想想表month和表day

閱讀關於SQL JOIN

當然,你不會有DataType DateTime

這個問題方式廣泛給你一個解決方案,而不是一個學習這裏那裏學答案。你的問題是關於基礎的。

0

有選項可以使用DIBI庫,並使用這種方式:

$query = dibi::query("SELECT ... 
FROM p... -- comment 
WHERE p.id = %i 
AND p.lang = %i", $id, 1); 
     $raw = $query -> fetchAll(); 
     foreach($raw as $n => $row) { 
      array_push($output, Array('p_id' => $row['p'],//comment 
       'p_w' => $row['p2'] 

      )); 
     } 
1

您可以使用PDO

<?php 
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); 
$stmt->bindParam(':name', $name); 
$stmt->bindParam(':value', $value); 

// insert one row 
$name = 'one'; 
$value = 1; 
$stmt->execute(); 

// insert another row with different values 
$name = 'two'; 
$value = 2; 
$stmt->execute(); 
?> 

在這種情況下,即使您有很多字段,您也可以識別字段而不會混淆。