2

次のようなクエリが必要です。

SELECT * FROM table WHERE owner_field = 100

ただし、「owner_field」はいくつかのテーブルで異なります。フィールドの識別にインデックスを使用したい:

SELECT * FROM table WHERE (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME=table AND INDEX_NAME='owner') = 100

私は何を間違っていますか?

更新:セキュリティ制御のために、この条件を INSERT、UPDATE、DELETE クエリに追加したいと思います (ユーザーは自分のデータに対してのみ何でも実行できます)。

次のようなMysql構造:

user_id     
post_id        post_author    = user_id
category_id    category_owner = user_id
4

2 に答える 2

0

もっと簡単な方法を見つけたと思います:

CREATE VIEW indexed_posts AS 
SELECT * FROM posts, users
WHERE post_author = user_id 
WITH CHECK OPTION;

次に、クエリを使用できます。

SELECT * FROM indexed_posts WHERE user_id = $_SESSION['user_id'];
于 2012-10-29T07:50:16.830 に答える
0

これはひどい設計であり、おそらく不可能です。

なぜ使用しないのVIEWですか?

CREATE VIEW table1_ownerfield AS SELECT ownerfield_1 FROM table1;
CREATE VIEW table2_ownerfield AS SELECT ownerfield_2 FROM table2;

次に、それらをテーブルとして使用します。

SELECT * FROM table1_ownerfield;
SELECT * FROM table2_ownerfield;

質問の 2 番目の部分については、 using triggersをご覧ください。

編集:

必要なビューの種類は次のようになります。

CREATE VIEW my_posts AS 
    SELECT * FROM posts WHERE post_owner = CURRENT_USER() 
    WITH CHECK OPTION;
CREATE VIEW my_categories AS 
    SELECT * FROM categories WHERE category_owner = CURRENT_USER() 
    WITH CHECK OPTION;

あなたはおそらく次のようなことをしたいと思うでしょう:

テーブルを作成します。

 CREATE TABLE user_connections (
     user_connection_id INT AUTO_INCREMENT PRIMARY KEY,
     mysql_connection_id INT,
     user_id INT
 );

次に、ユーザーがログインするときに、関数を使用してこのテーブルに mysql 接続 ID を入力しますCONNECTION_ID()

次に、次のようなビューを作成できます。

CREATE VIEW my_posts AS 
    SELECT * FROM posts p JOIN user_connections uc 
    WHERE uc.mysql_connection_id = CONNECTION_ID() 
    AND p.post_user_id = uc.user_id 
    WITH CHECK OPTION;
CREATE VIEW my_categories AS 
    SELECT * FROM categories c JOIN user_connections uc 
    WHERE uc.mysql_connection_id = CONNECTION_ID() 
    AND c.category_user_id = uc.user_id 
    WITH CHECK OPTION;
于 2012-10-28T19:12:37.863 に答える