#php #mysql #sql
На этот вопрос уже дан ответ здесь:
Как соединить две таблицы БД
(1 ответ)
Закрыт 3 года назад.
здравствуйте, есть две таблицы:
`oc_vendor` (
`vendor_id` int(11) NOT NULL AUTO_INCREMENT,
`vproduct_id` int(11) NOT NULL,
`ori_country` varchar(128) COLLATE utf8_bin NOT NULL,
`product_cost` decimal(15,4) NOT NULL DEFAULT '0.0000',
`shipping_method` int(2) NOT NULL DEFAULT '0',
`prefered_shipping` int(2) NOT NULL DEFAULT '0',
`shipping_cost` decimal(15,4) NOT NULL DEFAULT '0.0000',
`vtotal` decimal(15,4) NOT NULL DEFAULT '0.0000',
`product_url` text COLLATE utf8_bin NOT NULL,
`vendor` int(11) NOT NULL,
`wholesale` varchar(128) COLLATE utf8_bin NOT NULL,
`date_add` datetime NOT NULL,
и вторая:
`oc_vendors` (
`vendor_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`vendor_name` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`commission_id` int(11) NOT NULL,
`product_limit_id` int(11) NOT NULL,
`company` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`company_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`vendor_description` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`telephone` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`fax` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`paypal_email` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`iban` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`bank_name` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`bank_address` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`swift_bic` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`tax_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`accept_paypal` tinyint(2) NOT NULL,
`accept_cheques` tinyint(2) NOT NULL,
`accept_bank_transfer` tinyint(2) NOT NULL,
`store_url` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`vendor_image` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`firstname` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`lastname` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`address_1` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`address_2` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`city` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`postcode` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`country_id` int(11) NOT NULL,
`zone_id` int(11) NOT NULL,
`sort_order` int(11) NOT NULL,
`date_add` datetime NOT NULL,
можно ли одним сложным запросом сделать выборку из этих двух, если можно то как???
а выбрать нужно vendor_name, vendor_description, vendor_image, firstname, lastname
from oc_vendors where vproduct_id = '.$product_id
где $product_id - id продукта в таблице oc_vendor ???
Ответы
Ответ 1
Если я правильно понял, то у вас в таблице нет oc_vendors нет поля ассоциации с таблицей oc_vendor а оно должно быть для работы любого запроса для двух и более таблиц. В случае если бы у вас было поле в таблице oc_vendors (назовем его например id_ven_to_venders ) запрос можно было бы составить например так: SELECT vendor_name, vendor_description, vendor_image, firstname, lastname Where id_ven_to_venders ='.$product_id.' поле по которому происходит ассоциация таблиц должно иметь такое же значение как и ассоциируемая запись из другой таблицы.. я не очень понимаю логику ваших таблиц и что в них храниться и как перекликается, но если предположить что 1 вендору из таблицы oc_vendor принадлежат несколько других (записей) из таблицы oc_vendors наше поле id_ven_to_venders должно было бы содержать значения vendor_id из таблицы oc_vendor ( соответственно задавая ассоциацию 1 к 1 или 1 ко многим ) З.Ы. семантика таблиц ужасная, я могу ошибаться но понять по название полей и таблиц что они содержат крайне затруднительно, рекомендую называть таблицы, поля и переменные максимально доступно и отлично от других иначе легко запутаться и вам и разработчикам который будут поддерживать ваш кодОтвет 2
На самом деле все оказалось проще чем я думал. Запрос выглядит так: Select vendor_name, firstname, lastname, ... From vendors, vendor where vendors.vendor_id=vendor.vendor and vendor.vproduct_id=product_id Всем спасибо )
Комментариев нет:
Отправить комментарий