Tam olarak ne istediğinizi yapabileceğiniz ve belki de başkalarının istediği gibi yapabileceğiniz küçük bir betik yaptım ... işte burada ... PHP için ... önce sütunların bir listesini yapmak zorundasınız. Tablonun ardından, her sütun için kendi türüne göre bir "case when" ifadesi yaparsınız ve bunu concat_ws deyimine koyup sha1 ile karıştırırsınız ... Bu yöntemi çok büyük tablolarda (600000+) kullandım kayıtlar) ve tüm kayıtları seçerken hız oldukça iyidir. Ayrıca ben bir concat_ws gerekli verileri Concat ve kullandığınız ne olursa olsun php veya bunu patlamaya daha hızlı olduğunu düşünüyorum, ama bu ... sadece deli bakar
<?
$query= mysql_query("SHOW COLUMNS FROM $table", $linklive);
while ($col = mysql_fetch_assoc($query)) {
$columns[] = mysql_real_escape_string($col['Field']);
if ($col['Key'] == 'PRI') {
$key = mysql_real_escape_string($col['Field']);
}
$columnsinfo[$col['Field']] = $col;
}
$dates = array("date","datetime","time");
$int = array("int","decimal");
$implcols = array();
foreach($columns as $col){
if(in_array($columnsinfo[$col]['Type'], $dates)){
$implcols[] = "(CASE WHEN (UNIX_TIMESTAMP(`$col`)=0 || `$col` IS NULL) THEN '[$col EMPTY]' ELSE `$col` END)";
}else{
list($type, $rest) = explode("(",$columnsinfo[$col]['Type']);
if(in_array($columnsinfo[$col]['Type'], $dates)){
$implcols[] = "(CASE WHEN (`$col`=0 || `$col` IS NULL) THEN '[$col EMPTY]' ELSE `$col` END)";
}else{
$implcols[] = "(CASE WHEN (`$col`='' || `$col` IS NULL) THEN '[$col EMPTY]' ELSE `$col` END)";
}
}
}
$keyslive = array();
//echo "SELECT $key SHA1(CONCAT_WS('',".implode(",", $columns).")) as compare FROM $table"; exit;
$q = "SELECT $key as `key`, SHA1(CONCAT_WS('',".implode(", ",$implcols).")) as compare FROM $table";
?>
bir önsezi olduğunu –