将类别从一个表附加到另一个MySQL中的条目

时间:2011-06-21 16:16:05

标签: php mysql relational-database

我有一个数据库,它接收用户提交的数据,我希望在大约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处理的表单中选择与您的业务相关联的类别时,如何在数据库中实际关联它们!

3 个答案:

答案 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 ...

湾使用businessmysql_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
}

希望以上有所帮助。我没有测试过上面的任何代码,所以如果有任何问题,你可能需要做一些调试。如果您有任何问题,请随时询问。