0

ちょっと助けが必要です。私が望むのは、member_id を取得して他のテーブルに渡すことだけです。 $this->db->insert_id(); を使用しようとしました。しかし、0に戻ります。しかし、テーブルを調べると、ID値は8です。他のテーブルで8の値を取得するにはどうすればよいですか? 1回の実行で2つのクエリを実行しようとしているためです。これが私のサンプルコードです。

$member = array(
                    'member_id' => null, 
                    'account_type' => $this->input->post('mem_type'),
                    'username' => strtolower($this->input->post('username')),
                    'account_type' => $this->input->post('mem_type'),
                    'lastname' => ucwords($this->input->post('lastname')),
                    'firstname' => ucwords($this->input->post('firstname')),
                    'middlename' => ucwords($this->input->post('middlename')),
                    'gender' => $this->input->post('gender'),
                    'email' => strtolower($this->input->post('email')),
                    'mobile_number' => $this->input->post('contact'),
                    'password' => md5($this->input->post('password')),
                    'upline' => $this->input->post('referral'),
                    'account_created' => date('Y-m-d h:i:s')
                );
                $member_insert_id = $this->db->insert_id();

                $id = $this->input->post('referral');

                //count the selected id in upline
                $this->db->like('upline',$id);
                $this->db->from('member');
                $query =  1 + $this->db->count_all_results();   

                $this->member = 0;

                if($query < $this->reglvl1){
                    $this->member = 1;
                }

                if($query < $this->reglvl2){
                    $this->member = 2;
                }

                if($query < $this->reglvl3){
                    $this->member = 3;
                }

                if($query < $this->reglvl4){
                    $this->member = 4;
                }

                if($query < $this->reglvl5){
                    $this->member = 5;
                }

                $insert_downline = array(
                    'down_id' => null,
                    'level' => $this->member,
                    'fkmember' => $id, //referral id
                    'downline' => $member_insert_id //member id
                    );

                return $this->db->insert('downline',$insert_downline);
                return $this->db->insert('member',$member); 

そして、私の他の問題は、テーブルにデータを挿入したときです。2番目のテーブルにのみ挿入されました。これが私のテーブル構造です:

CREATE TABLE `member` (
    `member_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `account_type` ENUM('REGULAR','DUPLICATE','CORPORATE','ADVANCE') NOT NULL,
    `username` VARCHAR(30) NOT NULL,
    `lastname` VARCHAR(50) NOT NULL,
    `firstname` VARCHAR(50) NOT NULL,
    `middlename` VARCHAR(50) NOT NULL,
    `gender` ENUM('Male','Female') NOT NULL,
    `email` VARCHAR(50) NOT NULL,
    `mobile_number` VARCHAR(50) NOT NULL,
    `password` VARCHAR(50) NOT NULL,
    `upline` VARCHAR(10) NOT NULL,
    `account_created` DATETIME NOT NULL,
    PRIMARY KEY (`member_id`),
    UNIQUE INDEX `username` (`username`),
    UNIQUE INDEX `mobile_number` (`mobile_number`),
    UNIQUE INDEX `email` (`email`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3;

CREATE TABLE `downline` (
    `down_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `level` INT(10) UNSIGNED NOT NULL,
    `fkmember` INT(10) UNSIGNED NOT NULL,
    `downline` INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (`down_id`),
    INDEX `fkmember` (`fkmember`),
    CONSTRAINT `downline_ibfk_1` FOREIGN KEY (`fkmember`) REFERENCES `member` (`member_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3;

最初にメンバーを挿入したいです。メンバーに参照 ID がない場合、自動的にメンバーに追加され、アップライン フィールドに「なし」の値が挿入されます。参照 ID は、メンバーシップを持つために使用を参照した人々から取得されます。また、メンバーに参照 ID がある場合は、メンバー テーブルとダウンライン テーブルにも追加されます。ただし、ダウンライン テーブルは、ユーザーがどのレベルであるかを検証します。レベルのルックアップに問題はありません。私の問題は私のダウンライン列にあります。$this->db->inser_id() からの値 0 に常に格納されます。正しい値を取得するにはどうすればよいですか? みんな助けてください。

4

2 に答える 2

0

あなたのコードは

編集:

$member_insert_id = $this->db->insert_id();

idこれは、データベースに対してクエリが実行された直後にのみ返されます。以前にメンバ テーブルにレコードを挿入した場所がわかりません$member_insert_id = $this->db->insert_id();。つまり、insert_id が取得できるものは何も挿入されていません。

以前に追加された Last id を取得したい場合は、次のようにすることができます。

$lastid=$this->db->query("SELECT MAX(member_id) FROM member");
于 2012-09-26T10:25:09.467 に答える
0

最後に挿入された ID を読み取ってテーブル$this->db->insert('member',$member);で使用するため、呼び出しはおそらくさらに上に配置する必要があると思います。downlineそれ以外の場合は、 を呼び出したときに$this->db->insert_id()、実際にはまだ何も挿入されていないため、読み取るものはありません!

于 2012-09-26T10:22:39.017 に答える