1

複数の画像をサーバーにアップロードするアップロードフォームを作成しました。また、ファイル名をデータベースに追加する関数をモデルに作成しました。これはすべてうまく機能します。すべての画像を 1 つのオファー (データベース内のテーブル) に割り当てたい

テーブル結合を使用して、特定の会社 (データベース内のテーブル) に複数のオファーを追加しています

したがって、1 つの会社が複数のオファーを持つことができますが、オファーは複数の画像である必要があります。

翻訳: Aanbieding はオファーを意味し、Bedrijven は会社を意味し、foto はイメージを意味します

現在のケース: 3 つのオファーが作成されています。したがって、画像ごとにオファーが作成されますが、情報は同じですが、違いは画像 ID だけです。

会社、オファー、および画像を結合するための私のテーブルは次のようになります。

bedrijfaanbiedingen
-------------------
idbedrijfaanbiedingen
idbedrijven
idaanbiedingen
idfotoaanbiedingen
idaanbiedingcat

ご覧のとおり、複数のオファーと複数の画像を持つ 1 つの会社を持つことができます。

オファーを追加するための私のモデルは次のようになります。

public function addaanbieding($image_data = array())
{
    $data1 = array(
        'Aanbieding' => $this->input->post('aanbiedingnaam'),
        'Tekst' => $this->input->post('aanbiedingomschrijving'),
        'Prijs' => $this->input->post('aanbiedingprijs'),
        'Conditie' => $this->input->post('aanbiedingconditie'),
        'prijssoort' => $this->input->post('prijsopties'),
    );      
    $this->db->insert('Aanbiedingen', $data1);

    $aanbiedingid = $this->db->insert_id();
    $catid = $this->input->post('categorie');

    if($this->db->affected_rows() >= 1) 
    { 
        $to_bedrijfaanbiedingen['idaanbiedingen'] = $this->db->insert_id();
        $to_bedrijfaanbiedingen['idbedrijven'] = $this->session->userdata('idbedrijven');
        $to_bedrijfaanbiedingen['idaanbiedingcat'] = $catid;
        $insert_data = array(
            'fotonaam' => $image_data['file_name']
        );
        $input = $this->input->post('userfile');
        if(isset($input)){
            $this->db->insert('fotoaanbiedingen', $insert_data);
        }else{
            return FALSE;
        }
        $fotoid = $this->db->insert_id();

        $to_bedrijfaanbiedingen['idbedrijven'] = $this->session->userdata('idbedrijven');
        $to_bedrijfaanbiedingen['idaanbiedingen'] = $aanbiedingid;
        $to_bedrijfaanbiedingen['idfotoaanbiedingen'] = $fotoid;

        $this->insert_bedrijfaanb2($to_bedrijfaanbiedingen);
    }; 
}

public function insert_bedrijfaanb2($data) 
{ 
    $this->db->insert('bedrijfaanbiedingen', $data); 
    return $this->db->affected_rows() >= 1 ? TRUE : FALSE; 
}

私が望むものが明確であることを願っています。

2 つ以上の画像を使用して、1 つの会社で 1 つのオファーを希望します。

編集:

私のテーブル全体の構造:

bedrijven (companies)
---------
idbedrijven
bedrijfsnaam
profiel
plaats
telefoonnummer
etc...

Aanbiedingen (offers)
------------
idaanbiedingen
Aanbieding
prijs
conditie
etc..

bedrijfaanbiedingen (companyoffers)
-------------------
idbedrijfaanbiedingen
idbedrijven
idaanbiedingen
idfotoaanbiedingen
idaanbiedingcat

fotoaanbiedingen
---------------
idfotoaanbiedingen
file_name
4

1 に答える 1

0

まあ、あなたが何を望んでいるのかは完全には明らかではありません(申し訳ありません)ので、間違ったことを説明している場合はご容赦ください。あなたがしようとしていると思うのは、データベースに一対多の関係を実装することです。画像の数が任意である場合、これはリンク テーブルを使用して行うのが最適です。
以下で説明するシステムを使用すると、効果的に無限の数の画像をオファーに、企業をオファーに、オファーを企業にリンクできます。

あなたのテーブルがどのように構築されているのかわからないので、いくつか作ります:

会社 (company_id,company_name) 画像 (image_id,image_url) オファー (offer_id,offer_details)

Image_company (image_company_id,image_id,company_id) //オファーなしで画像を企業にリンクしたい場合はオプション。

オファーが作成されます。company_offer を使用して会社をオファーにリンクし、image_offer を使用して画像をオファーにリンクします。

SQL は次のようになります。

SELECT company_name,image_url, {others} FROM Company LEFT JOIN Company_offer ON Company.company_id=Company_offer.company_id LEFT JOIN Image_offer ON Company_offer.offer_id=Image_offer.offer_id LEFT JOIN Image ON Image_offer.image_id = Image.image_id WHERE {基準がここに入る場所} // この SQL はテストされていないことに注意してください。

ここでの幸福の鍵は、データベースの設計です。各テーブルに格納されるデータを最小限に抑えれば、1 対多の関係を簡単に実装できます (理想的には、テーブル内の ID 以外のデータを他の場所で複製しないようにする必要があります)。詳細については、第 4 正規形を参照してください。それは多くのビットテーブルと時折いくつかの危険な結合を生み出しますが、結果は通常、より低いストレージコストでナビゲートするのがはるかに簡単なシステムになります.

于 2013-07-25T10:34:13.870 に答える