2

Joomla 2.5 を使用しています。MYSQL データベースを使用しています。job_field次の列を持つテーブルがあります。

cat_id  |  location_id
-----------------------
 1,4    |   66,70

別のテーブルと比較する必要がありますjob_value

cat_id  |  location_id | name
--------------------------------
 1      |   70         | Atul
 4      |   70,80      | Amit
 4      |   80,66      | Amol
 1      |   66         | Pritam    
 3      |   70         | Rahul
 2      |   66,90      | Ajit
 1      |   74         | Raju
 4      |   65,22      | Manoj

cat_id出力を比較しlocation_id、最初のテーブルの列job_detailsを 2 番目のテーブルのjob_valuecat_idと比較したいlocation_id

job_detailsそして、1 番目のテーブル ( ) の各値、つまりlocation_id列の値 (66、70) を、2 番目のテーブル ( job_value)の列で個別にチェックしlocation_idます。出力配列を次のように取得します

  Array (
    1 70     Atul
    4 70,80  Amit
    4 80,66  Amol
    1 66     Pritam
 )
4

2 に答える 2

3

これは悪い悪い悪い構造です。問題が解決できたとしても、解決すべきではありません。それは遅く、保守不可能になります。

貧弱な構造の代わりに、DBのこの部分のためにこれらの線に沿った何かを作成する必要があります。

CREATE TABLE PERSON (
    person_id BIGINT,
    name VARCHAR(64),
    PRIMARY KEY (person_id)
);

CREATE TABLE LOCATION (
    location_id BIGINT,
    name VARCHAR(64),
    PRIMARY KEY (location_id)
);
CREATE TABLE CAT (
    cat_id BIGINT,
    name VARCHAR(64),
    PRIMARY KEY (cat_id)
);

CREATE TABLE CAT_LOCATION (
    cat_id BIGINT,
    location_id BIGINT,
    PRIMARY KEY (cat_id,location_id),
    FOREIGN KEY (cat_id) REFERENCES cat(cat_id),
    FOREIGN KEY (location_id) REFERENCES location(location_id)
);

CREATE TABLE CAT_LOCATION_PERSON (
    cat_id BIGINT,
    location_id BIGINT,
    person_id BIGINT,
    PRIMARY KEY (cat_id,location_id,person_id),
    FOREIGN KEY (cat_id) REFERENCES cat(cat_id),
    FOREIGN KEY (location_id) REFERENCES location(location_id),
    FOREIGN KEY (person_id) REFERENCES person(person_id)
);

そして、単純な結合を行うことで、必要なものを簡単に取得するよりも簡単です。

SELECT cl.cat_id, cl.location_id, p.name
FROM CAT_LOCATION cl 
JOIN CAT_LOCATION_PERSON clp on cl.cat_id = clp.cat_id and cl.location_id=clp.location_id
JOIN PERSON p on clp.person_id = p.person_id

(数値をコンマで区切って、指定された形式で出力を提供するクエリを作成することを拒否します...(ただし、MySQLのGROUP_CONCAT機能を使用すると簡単に可能です))

于 2012-12-28T13:33:56.113 に答える
0

これを試して ::

SELECT 
* 
FROM table1
JOIN table2  ON FIND_IN_SET(table1.location_id, table2.location_id) > 0

MySQLの「IN」句でカンマ区切りの値を参照することもできます

于 2012-12-28T13:32:04.667 に答える