itakuraikura
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: single.phpとsingle-hoge.phpで条件分岐カスタム投稿タイプは
is_singular()
だったと思います。<?php if(is_single()): ?> 内容1 <?php elseif(is_singular('hoge')): ?> 内容2 <?php else: ?> 内容3 <?php endif; ?>
フォーラム: 使い方全般
返信が含まれるトピック: ALTER TABLEが大量に実行されてしまうたしかにそうですね。
手掛かりの少ない中でご回答ありがとうございました。
大変勉強になりました。フォーラム: 使い方全般
返信が含まれるトピック: ALTER TABLEが大量に実行されてしまう>wp_kindsテーブルが作成されたときにADD FOREIGN KEYすれば良い
なるほど!わかったかもしれません。
つまり下記34行目(#ここでwp_yasaiテーブルにFKを追加(※1)
のコメントの次の行)でFKをセットするという感じであっていますか?// wp_yasaiテーブル作成 my_create_table('yasai'); function my_create_table( $table_name ) { global $wpdb; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); $sql = "CREATE TABLE " . $wpdb->prefix . $table_name . "( post_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT ,kind_id INT(2) UNSIGNED NOT NULL ,content VARCHAR(10) ,PRIMARY KEY (post_id) #kindsテーブルのCREATEが終わってから下記を実行するのでここではコメントアウト(※1) #,FOREIGN KEY (kind_id) REFERENCES wp_kinds(kind_id) );"; add_option($table_name."_version", '1.0'); dbDelta($sql); } // wp_kindsテーブル作成 my_create_table('kinds'); fnction my_create_table( $table_name ) { global $wpdb; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); $sql = "CREATE TABLE " . $wpdb->prefix . $table_name . "( kind_id INT(2) UNSIGNED NOT NULL AUTO_INCREMENT ,kind VARCHAR(10) ,PRIMARY KEY (kind_id) );"; add_option($table_name."_version", '1.0'); dbDelta($sql); #ここでwp_yasaiテーブルにFKを追加(※1) my_add_fk( 'wp_yasai', 'kind_id', 'wp_kinds', 'kind_id' ); } // 外部キー追加 function my_add_fk($child_table, $child_col, $parent_table, $parent_col){ global $wpdb; $wpdb->query("ALTER TABLE $child_table ADD FOREIGN KEY($child_col) REFERENCES $parent_table($parent_col)"); }
できれば教えて頂きたいのですが、@munyagu 様もこのようにしますか?
自分なりに12行目のコメントアウトで「FKを別のタイミングで設定します」ということを伝えているつもりですが、やはりタイミングが別だとわかりにくいというか…、でも仕方ないですもんね。何かわかりやすい方法があればいいのですが。フォーラム: 使い方全般
返信が含まれるトピック: ALTER TABLEが大量に実行されてしまう以下のように「FKが設定されていなければ」という条件でもあればと思っているのですが、なかなか検索しても見つけられません…
function my_add_fk($child_table, $child_col, $parent_table, $parent_col){ global $wpdb; if( 「FKが設定されていなければ」 ){ $wpdb->query("ALTER TABLE $child_table ADD FOREIGN KEY($child_col) REFERENCES $parent_table($parent_col)"); } }
フォーラム: 使い方全般
返信が含まれるトピック: ALTER TABLEが大量に実行されてしまうまた複数がいくつになるかの法則を見つけまして、my_create_table()で設定したカラムの数だけFKが追加される、といった法則でした。
つまり以下のようにカラムが3つあればFKは3ついった流れです。
まずは【A1】を実行し、
SHOW CREATE TABLE wp_yasai;
を実行
↓ 結果'CREATE TABLE'wp_yasai' ( 'post_id' bigint(20) unsigned NOT NULL AUTO_INCREMENT, 'kind_id' int(2) unsigned NOT NULL, 'content' varchar(10) DEFAULT NULL, PRIMARY KEY ('post_id') ) ENGINE=InnoDB DEFAULT CHARSET=utf8'
そして【A2】を実行し 、
SHOW CREATE TABLE wp_yasai;
を実行
↓ 結果'CREATE TABLE'wp_yasai' ( 'post_id' bigint(20) unsigned NOT NULL AUTO_INCREMENT, 'kind_id' int(2) unsigned NOT NULL, 'content' varchar(10) DEFAULT NULL, PRIMARY KEY ('post_id'), KEY 'kind_id' ('kind_id'), CONSTRAINT 'wp_yasai_ibfk_1' FOREIGN KEY ('kind_id') REFERENCES 'wp_kinds' ('kind_id'), CONSTRAINT 'wp_yasai_ibfk_2' FOREIGN KEY ('kind_id') REFERENCES 'wp_kinds' ('kind_id'), CONSTRAINT 'wp_yasai_ibfk_3' FOREIGN KEY ('kind_id') REFERENCES 'wp_kinds' ('kind_id') ) ENGINE=InnoDB DEFAULT CHARSET=utf8'
ご覧のように
wp_yasai_ibfk_1
とwp_yasai_ibfk_2
とwp_yasai_ibfk_3
という3つのFKになってしまうのです(尚こちらの入力フォームの事情により、上記の結果はバッククオートをアポストロフィーに変換しています。)
フォーラム: 使い方全般
返信が含まれるトピック: ALTER TABLEが大量に実行されてしまうこんにちは
いつもお世話になっております>両方のテーブルが2つとも作られた時点で1度だけ ADD FOREIGN KEY すればいいんじゃないでしょうか。
とのことですが、どのようにすればできますか?次の【A1】と【A2】の二回を、【B1】の一回に変更する、という意味ではないですよね?
—
質問では下記【A1】と【A2】という二回のステップに分けてやっていまして、
【A1】 my_add_fk()をコメントアウトし、my_create_table()を書いた状態でサイトを読み込みテーブル作成を実行
【A2】my_create_table()をコメントアウトし、my_add_fk()を書いた状態でサイトを読み込みFK設定を実行アドバイスを受けて下記【B1】の一回だけにしてみたのですが、やはりFKは複数入ってしまいました。
【B1】 my_add_fk()とmy_create_table()を書いた状態でサイトを読み込みテーブル作成とFK設定を実行
フォーラム: 使い方全般
返信が含まれるトピック: ストレージエンジンの確認方法なるほどもう少し調べてみます。ありがとうございます。