Hi all,
Ich habe folgendes Problem und bisher noch nicht rausgekriegt.
MySQL Table:
CREATE TABLE karlo_users_form (
user_form_id int(2) NOT NULL auto_increment,
user_form_db_field_name varchar(50) NOT NULL default '',
user_form_appear_name varchar(100) NOT NULL default '',
user_form_appear_field_name varchar(50) NOT NULL default '',
user_form_extra int(1) NOT NULL default 0,
field_type_id int(2) NOT NULL default 0,
user_form_field_value_cid int(5) default NULL,
user_form_field_position_pointer int(5) default 0,
PRIMARY KEY (user_form_id)
)TyPE =MyISAM;
Und Funktion:
function _RearrangeUsersProfile(){
//GET NEW ADDED FIELDS WITH DESC ORDER
$sql="SELECT * FROM karlo_users_form WHERE user_form_field_position_pointer != '' GROUP BY user_form_field_position_pointer DESC";
if(DB::isError($rsTmp = $this->_oConn->query($sql))){
catchExc($rsTmp->getMessage());
return false;
}
//ASSIGN RESULTS TO AN ARRAY
$i=0;
while($row=$rsTmp->fetchRow(DB_FETCHMODE_ASSOC)){
$aResults[$i] = $row;
$i++;
}
$numRows = count($aResults);
if($numRows > 0){
//LOOP THROUGH ALL THE RESULTS NEED TO BE CHANGE
for($i=0;$i<$numRows;$i++){
//LOOP FROM RESULT ID TO THE ROW AFTER THE POSTION POINTER FOUND
for($j=($aResults[$i]["user_form_id"]-1);$j > $aResults[$i]["user_form_field_position_pointer"];$j--){
//GET THE ROW BEFORE THE ROW NEEDED TO BE CHANGED
$sql= "SELECT * FROM karlo_users_form WHERE user_form_id = $j";
if(DB::isError($rsTmp = $this->_oConn->query($sql))){
catchExc($rsTmp->getMessage());
return false;
}//END IF
$result= $rsTmp->fetchRow(DB_FETCHMODE_ASSOC);
//EXCHANGE TWO NEIBOUGH ROWS
$sql="UPDATE karlo_users_form SET user_form_db_field_name = ".$aResults[$i]['user_form_db_field_name'].",user_form_appear_name = ".$aResults[$i]['user_form_appear_name'].",user_form_appear_field_name= ".$aResults[$i]['user_form_appear_field_name'].",user_form_extra = ".$aResults[$i]['user_form_extra'].",field_type_id = ".$aResults[$i]['field_type_id'].",user_form_field_value_cid = ".$aResults[$i]['user_form_field_value_cid'].",user_form_field_position_pointer= 0 WHERE user_form_id = $j";
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}//END IF
$sql="UPDATE karlo_users_form SET user_form_db_field_name = ".$result['user_form_db_field_name'].",user_form_appear_name = ".$result['user_form_appear_name'].",user_form_appear_field_name= ".$result['user_form_appear_field_name'].",user_form_extra = ".$result['user_form_extra'].",field_type_id = ".$result['field_type_id'].",user_form_field_value_cid = ".$result['user_form_field_value_cid'].",user_form_field_position_pointer= 0 WHERE user_form_id = ($j+1)";
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}//END IF
}//END FOR
}//END FOR
return true;
}//END IF
}
Es ist ziemlich lang aber der Algorithmus ist so:
Ich nehme alle Einträge in karlo_users_form raus, die mit user_form_field_position_pointer !=0 (user_form_field_position_pointer soll id von einem Eintrag sein und kleiner id von diesem Eintrag) beendet.Nennen wir eine z.B.: $id_change. Danach tausche ich dieser Eintrag zur Position ($id_change-1).
Ich benutzer PHP 5.1.1,MySQL 5, OS: Windows.
Variable $_oConn ist Objekt zur Verbindung mit Datenbank und funktioniert richtig!
Das Endergebnis ist immer true aber es gibt in Datenbank tatsächlich keine Änderungen. Ich freue mich sehr, von euch einen Rat zu warten.
(Nach meiner Meinung, Fehler kann die Unterschiede von Feldertypen sein)
Danke im Vorraus!
Ich habe folgendes Problem und bisher noch nicht rausgekriegt.
MySQL Table:
CREATE TABLE karlo_users_form (
user_form_id int(2) NOT NULL auto_increment,
user_form_db_field_name varchar(50) NOT NULL default '',
user_form_appear_name varchar(100) NOT NULL default '',
user_form_appear_field_name varchar(50) NOT NULL default '',
user_form_extra int(1) NOT NULL default 0,
field_type_id int(2) NOT NULL default 0,
user_form_field_value_cid int(5) default NULL,
user_form_field_position_pointer int(5) default 0,
PRIMARY KEY (user_form_id)
)TyPE =MyISAM;
Und Funktion:
function _RearrangeUsersProfile(){
//GET NEW ADDED FIELDS WITH DESC ORDER
$sql="SELECT * FROM karlo_users_form WHERE user_form_field_position_pointer != '' GROUP BY user_form_field_position_pointer DESC";
if(DB::isError($rsTmp = $this->_oConn->query($sql))){
catchExc($rsTmp->getMessage());
return false;
}
//ASSIGN RESULTS TO AN ARRAY
$i=0;
while($row=$rsTmp->fetchRow(DB_FETCHMODE_ASSOC)){
$aResults[$i] = $row;
$i++;
}
$numRows = count($aResults);
if($numRows > 0){
//LOOP THROUGH ALL THE RESULTS NEED TO BE CHANGE
for($i=0;$i<$numRows;$i++){
//LOOP FROM RESULT ID TO THE ROW AFTER THE POSTION POINTER FOUND
for($j=($aResults[$i]["user_form_id"]-1);$j > $aResults[$i]["user_form_field_position_pointer"];$j--){
//GET THE ROW BEFORE THE ROW NEEDED TO BE CHANGED
$sql= "SELECT * FROM karlo_users_form WHERE user_form_id = $j";
if(DB::isError($rsTmp = $this->_oConn->query($sql))){
catchExc($rsTmp->getMessage());
return false;
}//END IF
$result= $rsTmp->fetchRow(DB_FETCHMODE_ASSOC);
//EXCHANGE TWO NEIBOUGH ROWS
$sql="UPDATE karlo_users_form SET user_form_db_field_name = ".$aResults[$i]['user_form_db_field_name'].",user_form_appear_name = ".$aResults[$i]['user_form_appear_name'].",user_form_appear_field_name= ".$aResults[$i]['user_form_appear_field_name'].",user_form_extra = ".$aResults[$i]['user_form_extra'].",field_type_id = ".$aResults[$i]['field_type_id'].",user_form_field_value_cid = ".$aResults[$i]['user_form_field_value_cid'].",user_form_field_position_pointer= 0 WHERE user_form_id = $j";
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}//END IF
$sql="UPDATE karlo_users_form SET user_form_db_field_name = ".$result['user_form_db_field_name'].",user_form_appear_name = ".$result['user_form_appear_name'].",user_form_appear_field_name= ".$result['user_form_appear_field_name'].",user_form_extra = ".$result['user_form_extra'].",field_type_id = ".$result['field_type_id'].",user_form_field_value_cid = ".$result['user_form_field_value_cid'].",user_form_field_position_pointer= 0 WHERE user_form_id = ($j+1)";
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}//END IF
}//END FOR
}//END FOR
return true;
}//END IF
}
Es ist ziemlich lang aber der Algorithmus ist so:
Ich nehme alle Einträge in karlo_users_form raus, die mit user_form_field_position_pointer !=0 (user_form_field_position_pointer soll id von einem Eintrag sein und kleiner id von diesem Eintrag) beendet.Nennen wir eine z.B.: $id_change. Danach tausche ich dieser Eintrag zur Position ($id_change-1).
Ich benutzer PHP 5.1.1,MySQL 5, OS: Windows.
Variable $_oConn ist Objekt zur Verbindung mit Datenbank und funktioniert richtig!
Das Endergebnis ist immer true aber es gibt in Datenbank tatsächlich keine Änderungen. Ich freue mich sehr, von euch einen Rat zu warten.
(Nach meiner Meinung, Fehler kann die Unterschiede von Feldertypen sein)
Danke im Vorraus!
Kommentar