我有一个数据库,它接收用户提交的数据,我希望在大约10个类别中的一个或几个下分组的条目。
因此,例如,您将您的条目添加到我的网站,说明所有关于您的业务(汽车代客服务),并且我为您提供了在10个固定类别(汽车,移动服务)中对您的条目进行分类的机会等等),因此,如果用户在“汽车”或“移动服务”类别下搜索商家,则会从查询中返回您的商家。
因为我从这里得到了大部分答案,为了达到这个目的,我有三个表(下面的结构)的数据库,一个用于您的业务条目,一个列出设置类别,一个关系表我已添加前两个表中的唯一键。
CREATE TABLE `business` (
`bus_id` INT NOT NULL AUTO_INCREMENT,
`bus_name` VARCHAR(50) NOT NULL,
`bus_dscpn` TEXT NOT NULL,
`bus_url` VARCHAR(255) NOT NULL,
PRIMARY KEY (`bus_id`)
)
CREATE TABLE `categories` (
`category_id` INT NOT NULL AUTO_INCREMENT,
`category_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`category_id`)
)
CREATE TABLE `tbl_works_categories` (
`bus_id` INT NOT NULL,
`category_id` INT NOT NULL
)
我无法理解的是,当您从使用PHP处理的表单中选择与您的业务相关联的类别时,如何在数据库中实际关联它们!
答案 0 :(得分:1)
要获取您可以执行的所有类别的商户数据,
SELECT bus.*, cat.category_name FROM business bus
JOIN tbl_works_categories twc USING (bus_id)
JOIN categories cat USING (category_id)
WHERE bus.bus_id = ?
要从类别名称检索业务数据,只需切换WHERE参数
即可SELECT bus.*, cat.category_name FROM business bus
JOIN tbl_works_categories twc USING (bus_id)
JOIN categories cat USING (category_id)
WHERE cat.category_name = ?
答案 1 :(得分:0)
我假设您的表单会返回所选每个类别的类别ID,并且这些ID与您的类别表中的category_id相对应。
首先,将业务记录插入业务表,这将为您提供自动增量编号(PHP中的mysql_insert_id函数或您正在使用的库的任何函数)。所以,你在某个地方存储了$idfromfunction
。
使用该商家ID,然后循环浏览您的类别ID
(也许已经使用过):
SELECT category_id, category_name
FROM categories
(...并通过复选框或下拉列表或其他内容向您的用户显示此列表)
用户选择一个$categoryidfromform
后,您可以插入到tbl_works_categories表中
INSERT INTO tbl_works_categories
(bus_id, category_id)
VALUES
( $idfromfunction, $categoryidfromform) ;
答案 2 :(得分:0)
我同意你的看法,这很简单。也许这会回答你的问题。
我认为您的表单有复选框或多选框,以允许用户为他/她的业务选择类别。并且复选框/选择框的“value”属性设置为类别ID,存储在categories
表中。因此,现在提交表单时,您将获得PHP脚本以及表单中的其他输入,该数组包含用户选择的类别的ID。我们称之为$ _POST ['categories']
方法1 :
一个。运行查询 - INSERT INTO business
...
湾使用business
或mysql_insert_id
读取mysqli->insert_id
表中最后一个条目的ID,具体取决于您使用的是MySQL还是MySQLi库。假设您将此ID存储在$busId
℃。从$ _POST ['categories'],使用implode()
生成逗号分隔的字符串。假设您将此字符串存储在$strCategories
d
INSERT INTO `tbl_works_categories` (`bus_id`, `category_id`)
SELECT $busId, `category_id`
FROM `categories`
WHERE `category_id` IN ($strCategories);
方法2 :
或者,您也可以遍历POST数组并生成INSERT查询,如:
$q = '';
if (!empty($_POST['categories'])) {
$q = 'INSERT INTO `tbl_works_categories` (`bus_id`, `category_id`) VALUES ';
foreach ($_POST['categories'] as $categoryId) {
$q .= '(' . $busId . ', ' . $categoryId . '),';
}
}
$q = trim($q, ','); // to remove the trailing comma
if (!empty($q)) {
// execute query $q
}
希望以上有所帮助。我没有测试过上面的任何代码,所以如果有任何问题,你可能需要做一些调试。如果您有任何问题,请随时询问。