Cóż, zrobiłem mały skrypt, który mógłby zrobić dokładnie to, co chcesz, i może to, czego inni chcą ... więc tutaj jest ... dla PHP, który jest ... najpierw musisz zrobić listę kolumn tabeli, następnie tworzysz instrukcję "case when" dla każdej kolumny w oparciu o ich typ i wstaw ją do instrukcji concat_ws, a następnie mieszaj ją z sha1 ... użyłem tej metody na bardzo dużych tabelach (600000+ rekordy), a prędkość jest całkiem dobra po wybraniu wszystkich rekordów. Myślę też, że szybciej jest połączyć wymagane dane w concat_ws i eksplodować w php lub cokolwiek innego, ale to tylko przeczucie ...
<?
$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";
?>
To wygląda na szalonego –