1

私はいくつかのテーブル1の連絡先と複数のデータを持っています

連絡先にはIDフィールドと名前フィールドがあり、データには連絡先(およびその他のフィールド)と呼ばれるフィールドがあります。

例:連絡先

ID - Name
1 - James
2 - Mark
3 - Doug

例:データ

ID - Contacts - Data
1 - 1,3 - more data
2 - 2 - more data
3 - 2,3,1 - more data

明らかに、コンマで区切られた番号は、連絡先テーブルの複数の人にリンクしています。カンマ区切りのリストから人々の名前に変換するにはどうすればよいですか。標準の左結合は機能しません。

元のクエリでそれを行う方法はありますか、それとも元のwhileループ内のforeach内にwhileを追加する必要がありますか?のような(以下も機能しませんが、ivが得た限りでは):

//original query while {
        $contacts_array = array(implode(",",$db['Contacts'])); 
        foreach ($contacts_array as $contacts_id) 
        { 
            $contacts_query = "SELECT Name FROM data_contacts WHERE ID='$contacts_id'";
            $contacts_result = mysql_query ($contacts_query);
            $contactslist="";
            while($contacts=mysql_fetch_array($contacts_result)){
                $contactslist .= $contacts['Name'].", ";
            } 
        } 
echo $contactslist;
}
4

2 に答える 2

4

私は常に、コンマ区切りの値ではなく、個々の行との多対多の関係を保存してきました。

ID - Contacts
1 - 1
1 - 3
2 - 2
3 - 2
3 - 3
3 - 1
于 2012-06-19T20:35:39.817 に答える
1

を使えば可能FIND_IN_SETです。ただし、MrSlayer が提案したように、テーブル構造を再考する必要があります。これは、多対多の関係を格納する適切なリレーショナルな方法です。

于 2012-06-19T20:36:29.247 に答える