SQLiteでの倉庫と在庫数の結合方法

このQ&Aのポイント
  • SQLiteで倉庫テーブルと在庫テーブルを結合して、特定の品物の倉庫ごとの在庫数を取得する方法を教えてください。
  • 倉庫データや在庫データの作り方にもアドバイスがほしいです。
  • 結合がない場合にも倉庫の行を表示する方法も知りたいです。
回答を見る
  • ベストアンサー

結合?の仕方がわからず困っています。

こんにちは、ほぼ初心者ですがよろしくお願いします。 sqlite2 で以下のような倉庫テーブルと在庫数テーブルがあったとして、 手順5で、ある品物(item_id = 1)の倉庫ごとの在庫数を取得したいと思っています。 倉庫に結合する在庫データがなくても、 倉庫に対する行を取得できる SQL 文を教えていただけませんでしょうか? ※そもそもテーブルの作り方がおかしいでしょうか? その辺も含めてアドバイスいただけるとありがたいです。 -- 以下sqlite です .mode column .header ON -- 手順1 倉庫テーブル CREATE TABLE stock_sites ( id INTEGER NOT NULL PRIMARY KEY , name TEXT NOT NULL ); -- 手順2 在庫テーブル CREATE TABLE stocks ( id INTEGER NOT NULL PRIMARY KEY , stock_site_id INTEGER NOT NULL, item_id INTEGER NOT NULL, stock INTEGER NOT NULL, UNIQUE(stock_site_id, item_id) ); -- 手順3、倉庫データ INSERT INTO stock_sites(name) VALUES('site_A'); INSERT INTO stock_sites(name) VALUES('site_B'); INSERT INTO stock_sites(name) VALUES('site_C'); -- 手順4、在庫データ INSERT INTO stocks(stock_site_id, item_id, stock) VALUES(1,1,10); INSERT INTO stocks(stock_site_id, item_id, stock) VALUES(2,2,20); -- 手順5 ある品の倉庫ごとの在庫数を取得したい SELECT t1.name AS site_name, t2.* FROM stock_sites AS t1 LEFT JOIN stocks AS t2 ON t1.id = t2.stock_site_id WHERE t2.item_id = 1 ORDER BY t1.id; -- 結果 -- site_name  t2.id   t2.stock_site_id t2.item_id t2.stock -- ---------- ---------- ---------------- ---------- ---------- -- site_A   1      1         1     10 -- 欲しい結果 -- site_name  t2.id   t2.stock_site_id t2.item_id t2.stock -- ---------- ---------- ---------------- ---------- ---------- -- site_A   1      1         1     10 -- site_B -- site_C

  • g_p_
  • お礼率78% (26/33)

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

こう? SELECT t1.name AS site_name, t2.* FROM stock_sites AS t1 LEFT JOIN stocks AS t2 ON t1.id = t2.stock_site_id and t2.item_id = 1 ORDER BY t1.id;

g_p_
質問者

お礼

早くに回答いただいていたのに遅くなってすみません。 結合するときに条件を複数付けるんですねぇ。 全然気が付きませんでした。 おかげさまでうまくやれそうです。 ありがとうございます。

関連するQ&A

  • 階層構造のテーブルの行の取得について

    このジャンルでお願いします。 次のようなテーブルで CREATE TABLE IF NOT EXISTS user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO user (name) VALUES ('user1'); INSERT INTO user (name) VALUES ('user2'); INSERT INTO user (name) VALUES ('user3'); CREATE TABLE IF NOT EXISTS item ( id int(11) NOT NULL AUTO_INCREMENT, parent_id INT, name varchar(32) NOT NULL, FOREIGN KEY (parent_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); INSERT INTO item (parent_id, name) VALUES (null, 'item6'); INSERT INTO item (parent_id, name) VALUES (6, 'item7'); INSERT INTO item (parent_id, name) VALUES (null, 'item8'); CREATE TABLE IF NOT EXISTS user_item ( id int(11) NOT NULL AUTO_INCREMENT, user_id INT, item_id INT, type varchar(16) NOT NULL, PRIMARY KEY(id), FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (item_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO user_item (user_id, item_id, type) VALUES (1, 1, 'allow'); INSERT INTO user_item (user_id, item_id, type) VALUES (1, 3, 'deny'); INSERT INTO user_item (user_id, item_id, type) VALUES (1, 7, 'allow'); user_itemのuser_idが1のitemの行を取得したいのですが、 その条件として ・user_itemテーブルのtypeが'allow'のitem_id以下のitemの行 ・ただしtypeが'deny'のitem_id以下の行は除く この例だと、user_itemの INSERT INTO user_item (user_id, item_id, type) VALUES (1, 1, 'allow'); の行によってitemテーブルの INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); が取得候補になりますが、 INSERT INTO user_item (user_id, item_id, type) VALUES (1, 3, 'deny'); によって INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); の行は除かれ、 INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); の行が取得されます。 つまりitemテーブルにおいて上の階層の直近の(user_itemと結合して取得した)typeが 'allow'である場合のみ取得したいのです。 INSERT INTO item (parent_id, name) VALUES (null, 'item1');←取得 INSERT INTO item (parent_id, name) VALUES (1, 'item2');←取得 INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5');←取得 INSERT INTO item (parent_id, name) VALUES (null, 'item6'); INSERT INTO item (parent_id, name) VALUES (6, 'item7');←取得 INSERT INTO item (parent_id, name) VALUES (null, 'item8'); 複雑ではありますが、これはどのようなSQL文にすれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • 最初に挿入された行だけ取得したい

    このジャンルでお願いします。 次のようなテーブルで CREATE TABLE IF NOT EXISTS user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO user (name) VALUES ('user1'); INSERT INTO user (name) VALUES ('user2'); INSERT INTO user (name) VALUES ('user3'); CREATE TABLE IF NOT EXISTS item ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO item (name) VALUES ('item1'); INSERT INTO item (name) VALUES ('item2'); INSERT INTO item (name) VALUES ('item3'); CREATE TABLE IF NOT EXISTS user_item ( id int(11) NOT NULL AUTO_INCREMENT, user_id INT, item_id INT, PRIMARY KEY(id), FOREIGN KEY (item_id) REFERENCES user(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (user_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO user_item (user_id, item_id) VALUES (1, 1); INSERT INTO user_item (user_id, item_id) VALUES (2, 1); INSERT INTO user_item (user_id, item_id) VALUES (3, 2); INSERT INTO user_item (user_id, item_id) VALUES (1, 2); INSERT INTO user_item (user_id, item_id) VALUES (1, 3); INSERT INTO user_item (user_id, item_id) VALUES (3, 3); user_itemテーブルでのselectで、 user_idが1で一番最初に挿入された行だけ を取得したいのですが、どのようなSQL文にすれば良いのでしょうか? この例なら INSERT INTO user_item (user_id, item_id) VALUES (1, 1);←取得 INSERT INTO user_item (user_id, item_id) VALUES (2, 1); INSERT INTO user_item (user_id, item_id) VALUES (3, 2); INSERT INTO user_item (user_id, item_id) VALUES (1, 2);←user_id=3が最初に挿入されているので取得しない INSERT INTO user_item (user_id, item_id) VALUES (1, 3);←取得 INSERT INTO user_item (user_id, item_id) VALUES (3, 3);

    • ベストアンサー
    • MySQL
  • 閉包テーブルのノードの移行について

    このジャンルでお願いします。 次のようなテーブルで CREATE TABLE IF NOT EXISTS item ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO item (name) VALUES ('item1'); INSERT INTO item (name) VALUES ('item2'); INSERT INTO item (name) VALUES ('item3'); INSERT INTO item (name) VALUES ('item4'); INSERT INTO item (name) VALUES ('item5'); INSERT INTO item (name) VALUES ('item6'); CREATE TABLE IF NOT EXISTS treepath ( ancestor_id int(11) NOT NULL, descendant_id int(11) NOT NULL, FOREIGN KEY (ancestor_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (descendant_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY(ancestor_id, descendant_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 1); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 2); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 3); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 2); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (3, 3); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (4, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (4, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (5, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (6, 6); item1┬item2    │ ├item4    │ │  └item6    │ └item5    │    └item3 を item1┬item2    │ │      │ └item5    │    └item3      └item4        └item6 のようにitem4以下のノードをitem3の下に移したいのですが、 その場合のtreepathテーブルの更新はどのようなSQL文にすれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • トリガーについて

    このジャンルでお願いします。 次のようなテーブルで DROP TABLE IF EXISTS item; CREATE TABLE IF NOT EXISTS item ( id int(11) NOT NULL AUTO_INCREMENT, parent_id INT, name varchar(32) NOT NULL, level int NOT NULL, FOREIGN KEY (parent_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); INSERT INTO item (parent_id, name) VALUES (null, 'item6'); INSERT INTO item (parent_id, name) VALUES (6, 'item7'); INSERT INTO item (parent_id, name) VALUES (null, 'item8'); DROP PROCEDURE IF EXISTS UPDATE_LEVEL; DELIMITER // CREATE PROCEDURE UPDATE_LEVEL() BEGIN DECLARE CNT INT; DECLARE LVL INT; SET LVL=1; UPDATE item SET level=0; UPDATE item SET level=LVL WHERE parent_id IS NULL; SELECT COUNT(*) INTO CNT FROM item WHERE level=LVL; WHILE CNT>0 DO UPDATE item INNER JOIN (SELECT id FROM item WHERE level=LVL) as temp ON parent_id=temp.id SET item.level=LVL+1; SET LVL=LVL+1; SELECT COUNT(*) INTO CNT FROM item WHERE level=LVL; END WHILE; END // DELIMITER ; DROP TRIGGER IF EXISTS TRG_INSERT_ITEM; DELIMITER // CREATE TRIGGER TRG_INSERT_ITEM AFTER INSERT ON item FOR EACH ROW BEGIN CALL UPDATE_LEVEL(); END; // DELIMITER ; itemテーブルにinsertした場合にトリガーでUPDATE_LEVEL()を実行するようにしているのですが、 実際に挿入すると、 >Can't update table 'item' in stored function/trigger because it is already used by statment which invoked this stored function/trigger . このようなエラーが出てしまいます・・・ UPDATE_LEVEL()にinsertらしき記述はないと思うのですが、 これはなぜこのようなエラーが出るのでしょうか?

    • ベストアンサー
    • MySQL
  • SQL文について

    SQLite バージョン3.7.10 を使用しています。 次のようなテーブル構造で、 PRAGMA foreign_keys = ON; CREATE TABLE t1 ( key TEXT PRIMARY KEY NOT NULL, name TEXT NOT NULL UNIQUE ); INSERT INTO t1 (key, name) VALUES ('t1_key1', 't1_name1'); INSERT INTO t1 (key, name) VALUES ('t1_key2', 't1_name2'); CREATE TABLE t2 ( key TEXT PRIMARY KEY NOT NULL, name TEXT NOT NULL UNIQUE ); INSERT INTO t2 (key, name) VALUES ('t2_key1', 't2_name1'); INSERT INTO t2 (key, name) VALUES ('t2_key2', 't2_name2'); CREATE TABLE t3 ( key TEXT PRIMARY KEY NOT NULL, name TEXT NOT NULL UNIQUE ); INSERT INTO t3 (key, name) VALUES ('t3_key1', 't3_name1'); INSERT INTO t3 (key, name) VALUES ('t3_key2', 't3_name2'); CREATE TABLE t4 ( year TEXT NOT NULL, t1_key TEXT NOT NULL, t3_key TEXT NOT NULL, percent INTEGER NOT NULL, UNIQUE(year, t1_key, t3_key), FOREIGN KEY(t1_key) REFERENCES t1(key) ON DELETE CASCADE, FOREIGN KEY(t3_key) REFERENCES t3(key) ON DELETE CASCADE ); INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2011', 't1_key1', 't3_key1', 10); INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2012', 't1_key2', 't3_key2', 50); INSERT INTO t4 (year, t1_key, t3_key, percent) VALUES ('2012', 't1_key2', 't3_key1', 100); CREATE TABLE t5 ( no INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT NOT NULL, t1_key TEXT NOT NULL, t2_key TEXT NOT NULL, t3_key TEXT NOT NULL, amount INTEGER NOT NULL, FOREIGN KEY(t1_key) REFERENCES t1(key) ON DELETE CASCADE, FOREIGN KEY(t2_key) REFERENCES t2(key) ON DELETE CASCADE, FOREIGN KEY(t3_key) REFERENCES t3(key) ON DELETE CASCADE ); INSERT INTO t5 (date, t1_key, t2_key, t3_key, amount) VALUES ('2011-01-01', 't1_key1', 't2_key1', 't3_key1', 3000); INSERT INTO t5 (date, t1_key, t2_key, t3_key, amount) VALUES ('2011-02-02', 't1_key2', 't2_key1', 't3_key1', 2000); INSERT INTO t5 (date, t1_key, t2_key, t3_key, amount) VALUES ('2012-01-01', 't1_key2', 't2_key1', 't3_key1', 5000); 例えばテーブル「t5」から、 dateカラム=’2011’ t1_keyカラム= (テーブル「t1」のt1_nameカラム=’t1_name1’のt1_key1) t2_keyカラム= (テーブル「t2」のt2_nameカラム=’t2_name1’のt2_key1) という条件の含まれてる全ての対応する行に、 テーブル「t4」のpercentカラムとテーブル「t5」のamountカラムを 掛け合わせた数値の合計を出力する。 ただしテーブル「t4」に対応するt1_keyとt3_keyがなければ、 percentを「0」としてamountと掛ける。 例えばこの条件だと '2011-01-01'と'2011-02-02'の2つの行のamountの合計を求めることになりますが、 '2011-01-01'の方は、テーブル「t4」にpercent「10」があるので 3000×(10/100)=300 '2011-02-02'の方は、テーブル「t4」にpercentがない(対応する行がない)ので 2000×(0/100)=0 合計 300+0=300 という結果が得たいです。 これはどのようなSQL文になるのでしょうか?

  • 指定した条件の組み合わせのSQL文

    SQLite バージョン3.7.10 を使用しています。 以下のようなテーブル構造で、 「t1」テーブルの全ての行と 「t6」テーブルのdateカラムの年の部分を グループ化して全ての組み合わせの 「t6」テーブルのamount の合計を出力したいのですが、 どのようなSQL文を書けば良いのでしょうか? 例えばこのデータ内容なら、以下のような結果が得たいです。 +------+-------+-------+ | year | t1_name | 合計 | +------+-------+-------+ | 2011 |t1_name1|  5000| +------+-------+------+ | 2012 |t1_name1| 10000| +------+-------+------+ | 2012 |t1_name2| 45000| +------+-------+------+ PRAGMA foreign_keys = ON; DROP TABLE IF EXISTS t6; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( key TEXT PRIMARY KEY NOT NULL, name TEXT NOT NULL UNIQUE ); INSERT INTO t1 (key, name) VALUES ('t1_key1', 't1_name1'); INSERT INTO t1 (key, name) VALUES ('t1_key2', 't1_name2'); CREATE TABLE t6 ( no INTEGER PRIMARY KEY AUTOINCREMENT, t1_key TEXT NOT NULL, date TEXT NOT NULL, amount INTEGER NOT NULL, FOREIGN KEY(t1_key) REFERENCES t1(key) ON DELETE CASCADE ); CREATE INDEX date on t6(date); INSERT INTO t6 (t1_key, date, amount) VALUES ('t1_key1', '2011-01-01', 5000); INSERT INTO t6 (t1_key, date, amount) VALUES ('t1_key1', '2012-01-01', 10000); INSERT INTO t6 (t1_key, date, amount) VALUES ('t1_key2', '2012-01-01', 15000); INSERT INTO t6 (t1_key, date, amount) VALUES ('t1_key2', '2012-02-01', 30000); http://ideone.com/I1mMba

  • 結合について質問です

    SQLite3データベースを使っています。 2つのテーブルt1とt2があり、t2はt1の重複する部分を担っています。 t2はt1に対し、NULLでもよい項目です。 t1には主キーのidと名前、 t2には主キーのidと、t1と結びつけるt1.id(外部キーにはしていません)と、 行ったことのある国の3つがあります。 山田花子さんはアメリカとイギリスに行ったことがあり、 山田太郎君はどこへも行ったことがないとします。 この時、行ったことのある国を1つ選ぶ処理をしたいのですが、 t1とt2を結合して、t1.idに対しグループ化(group by)を行った場合、 山田花子さんはアメリカへ行ったことがあります。 となります。 t2に山田太郎君の項目がない為、結合しても山田太郎君は取得できません。 もしt2に項目がなかった場合でも、 NULLとして取得したいのですがどうすればよいでしょうか? こういう表が欲しいです t1.id t1.名前   t2.国 1   山田花子 アメリカ 2   山田太郎 create table t1 (t1.id integer not null primary key, 名前 text not null) create table t2 (t2.id integer not null primary key, t1.id integer not null, 国 text not null) よろしくお願いします。

  • sqliteについて質問があります。

    sqliteについて質問があります。 db browser for sqlite でテーブルを作成したのですが、これをhtmlやphpなどを使いweb上で利用したいです。 例えば、ユーザーが”男”を選択したら”男”のデータ一覧が表示されるようにしたいのですがどうプログラムすればいいですか? 作れたファイルはtest.dbです。 (test.dbは開けませんでしたので以下、test.dbのhumanテーブルです。) BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS "human" ( "id" INTEGER NOT NULL, "name" TEXT NOT NULL, "sex" TEXT NOT NULL, "age" INTEGER NOT NULL, "prefecture" TEXT, "country" TEXT NOT NULL, PRIMARY KEY("id") ); INSERT INTO "human" VALUES (1,'中村静香','男',48,'千葉','japan'); INSERT INTO "human" VALUES (2,'中村ゆり','女',45,'埼玉','japan'); INSERT INTO "human" VALUES (3,'本田翼','女',22,'','japan'); INSERT INTO "human" VALUES (4,'本田望結','男',16,'東京','japan'); INSERT INTO "human" VALUES (5,'綾瀬はるか','女',34,'東京','japan'); INSERT INTO "human" VALUES (6,'中村アン','男',38,'','usa'); INSERT INTO "human" VALUES (7,'広瀬アリス','女',26,'東京','japan'); INSERT INTO "human" VALUES (8,'有村架純','男',31,NULL,'usa'); INSERT INTO "human" VALUES (9,'長澤まさみ','女',29,NULL,'uk'); INSERT INTO "human" VALUES (10,'有村藍里','男',18,'埼玉','japan'); COMMIT;

    • ベストアンサー
    • PHP
  • sqlite結果の非表示

    sqliteで質問があります。humanテーブルにid,name,sex,age,prefecture,country,image, のカラムがあるのですが、id,name ,sexはデータベース&webページ上ではいるので残したいのですが 表示をしたくありません。 どうすればユーザーに見えないようにできますか? 以下、htmlコードです <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの取得 $sql = 'SELECT * FROM human where country="japan"'; $res = $db->query($sql); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=320, height=480, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0, user-scalable=yes" /> <title>SQLite テスト</title> </head> <body> <h1>php の練習</h1> <div class="human"> <ul><?php while( $row = $res->fetchArray() ) { echo '<a href="https://yahoo.co.jp" target=_brank>'. '<li>' . $row[0] . '<span>' , $row[1].'<span>', $row[2].'<span>',$row[3].'<span>', $row[4]. '<span>', $row[5].'<span>' ,' $row[6]. '</li>'. '</a>' ; } ?></ul> </div> </body> </html> 以下、humanテーブルです BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS "human" ( "id" INTEGER NOT NULL, "name" TEXT NOT NULL, "sex" TEXT NOT NULL, "age" INTEGER NOT NULL, "prefecture" TEXT, "country" TEXT NOT NULL, "image" TEXT, PRIMARY KEY("id") ); INSERT INTO "human" VALUES (1,'中村静香','男',48,'千葉','japan','image/t1.jpg'); INSERT INTO "human" VALUES (2,'中村ゆり','女',45,'埼玉','japan','image/t2.jpg'); INSERT INTO "human" VALUES (3,'本田翼','女',22,'','japan','image/t3.jpg '); INSERT INTO "human" VALUES (4,'本田望結','男',16,'東京','japan',NULL); INSERT INTO "human" VALUES (5,'綾瀬はるか','女',34,'東京','japan',NULL); INSERT INTO "human" VALUES (6,'中村アン','男',38,'','usa',NULL); INSERT INTO "human" VALUES (7,'広瀬アリス','女',26,'東京','japan',NULL); INSERT INTO "human" VALUES (8,'有村架純','男',31,NULL,'usa',NULL); INSERT INTO "human" VALUES (9,'長澤まさみ','女',29,NULL,'uk',NULL); INSERT INTO "human" VALUES (10,'有村藍里','男',18,'埼玉','japan',NULL); COMMIT;

    • ベストアンサー
    • PHP
  • 同時アクセス

    例えば bigCategory,midleCategoryテーブルがあり、(今回はmiddleCategoryがbigCategoryときーでつながっている) create table bigCategory ( num integer not null primary key, name varchar(20) not null, ); insert into bigCategory values(0,'category_1'); insert into bigCategory valuers(1,'category_2'); create table middleCategory ( num integer not null primary key, name varchar(20) not null, bigkey integer not null ); insert into middleCategory values(0,'middle_1',0); insert into middleCategory values(1,'middle_2',1); bigCategoryの変更・削除をするときに、 1)middleCategoryがselectされている → 変更不可 2)middleCategoryがselectされていない →変更・削除可能 3)また、middleCategoryはselectされてなくて、 bigCategoryテーブルの変更行が他からselectされていたら、変更・削除不可 といった状況を実現したいのですが、可能なのでしょうか? 候補として、おもうはGRANTかな、と思ったりはするのですが。 いろいろ考えはするのですが、解決策が思いつかず質問させてもらいました。 宜しくお願いします。