SQL deyimi çok-çok

2 Cevap php

Ben birçok ilişki çok meydana gelen bir sql deyimi oluşturmak almak için çalışıyorum. Temelde ben bazı iş her iki kategoride yer ve posta kodu ile sorgulanan 2 kategorilere dayalı iş almak istiyorum. Şimdiye kadar ben zip kod parçası var ama o kategoriyi ayırt etmez ve ben de ne bunu yapmak için en etkili yol olacaktır kategoriler için bir tablo yok mu?

Burada sql deyimi çok uzak

$query = "SELECT * FROM contacts WHERE zipcode in ( " . join(",", $zipcodes) . " ) ";

İşte Tablo yapısı çok basittir. company_name char (55) NOT NULL,

`phone` char(20) default NULL,
`email` char(40) default NULL,
`address` text,
`city` text,
`state` text,
`zipcode` varchar(5) default NULL,
`id` varchar(10) NOT NULL,
`geo_id` varchar(20) NOT NULL,
`website` varchar(40) NOT NULL,
`vendor_id` varchar(10) NOT NULL

`id` int(11) unsigned NOT NULL auto_increment,
`zip_code` varchar(5) character set utf8 collate utf8_bin NOT NULL,
`city` varchar(50) character set utf8 collate utf8_bin default NULL,
`county` varchar(50) character set utf8 collate utf8_bin default NULL,
`state_name` varchar(50) character set utf8 collate utf8_bin default NULL,
`state_prefix` varchar(2) character set utf8 collate utf8_bin default NULL,
`area_code` varchar(3) character set utf8 collate utf8_bin default NULL,
`time_zone` varchar(50) character set utf8 collate utf8_bin default NULL,
`lat` float NOT NULL,
`lon` float NOT NULL,
PRIMARY KEY  (`id`),
KEY `zip_code` (`zip_code`)

Ben kategori tablo yok. Ben tek sorun i temas olup olmadığını belirlemek için bu tabloyu sorgulamaması nasıl 2 kategoride (perakende ve otelcilik) ile bir tablo yapacak;

retail hospitality or both...

2 Cevap

Çünkü gerçekten detay oldukça düşük düzeyde, emin, ama ne değil:

$query = "SELECT * FROM contacts WHERE zipcode in ( " . join(",", $zipcodes) . " ) AND category1 = YOUR_DESIRED_VALUE AND category2 = YOUR_DESIRED_VALUE;";

ya da sadece tek bir kategoride olması gerekiyorsa:

$query = "SELECT * FROM contacts WHERE zipcode in ( " . join(",", $zipcodes) . " ) AND (category1 = YOUR_DESIRED_VALUE OR category2 = YOUR_DESIRED_VALUE;");

Çok-çok ilişkileri genellikle sadece ilişkiyi saklamak için bir tablo gerektirir. Yani, bir rehber tablo değil, bir kategoriler tablo, ancak ayrı bir 'contact_categories' tablo.

Tablo, kendisi çok basit olabilir:

CREATE TABLE contact_categories (
  contact_id VARCHAR(10) NOT NULL REFERENCES contact (id),
  category_id INT NOT NULL
);

(Eğer 1 perakende olduğunu kategoriyi hatırlıyorum eğer bu tablo ile, hatta, ayrı kategoriler masa gerekmez, ve 2 örneğin, misafirperverliği)

Bir kişi bir kategoride ise o zaman, bunun için bir satır contact_categories tablo var. Iki kategoride ise, o zaman iki sıra, vb vardır

Kategori 1 işletmelerin tüm almak için, o zaman, bu gibi select görünüyor:

SELECT contacts.*
FROM contacts
    JOIN contact_categories ON (contacts.id = contact_id);

Eğer posta koduna göre kısıtlamak istiyorsanız, sadece WHERE yan tümcesi ekleyin:

SELECT contacts.*
FROM contacts
    JOIN contact_categories ON (contacts.id = contact_id)
WHERE zipcode in ('12345','23456','90210');