我已经创建了这个数据库模式,并且在这里的几个用户的帮助下,我有一个数据库,它将用户提交的业务条目存储在业务表中,这些业务表另外分组在catagories表中的大约10个catagories中的一个或几个之下,在tbl_works_catagories表中,将bus_id与catagory id匹配。
例如,bus_id 21可以与catagory_id 1,2,5,7,8相关联。
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
)
现在,我接下来要做的是一个搜索功能,它将根据类别返回业务。例如,假设其中一个进入业务表的业务是面包师,当它被输入时,它被分类为Food(catagory_id 1)和外卖(catagory_id 2)。
因此,访问者搜索“食品”类别下列出的商家,并返回我们友好的邻居面包店。
与所有PHP / MySQL一样,我不能(最初无论如何)了解逻辑,更别关注代码!
答案 0 :(得分:0)
也许你想要这样的东西:
SELECT `bus_id` FROM `tbl_works_categories` WHERE `category_id` = *some id from the search*
AND `category_id` = *some other id from the search*;
虽然您需要这些ID,但有几种方法可以做到这一点,我可能会说最直接的......
你从$ _POST获得类别,所以我们只说你输入了2个。 (食物和外卖)。无论你想要解析这些,有多种方法,但关键是它们来自$ _POST。
为你找到的每一个执行此类事情:
SELECT `category_id` FROM `categories` WHERE `category_name` LIKE '%*the name from $_POST*%';
将这些结果存储在一个数组中...根据您拥有的数量,您可以构建一个类似于我先描述的类似的适用查询。 (请记住,您不需要和AND,如果您在此处返回> 1 category_id,则必须检测到这些内容)
我不会讨论像安全这样的事情。在执行包含用户提交数据的查询时要小心。
另一种解决方案可能涉及加入,不太清楚我的头脑是什么样的。
祝你好运。答案 1 :(得分:0)
您应该在表格中设置外键以将它们链接在一起。
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,
FOREIGN KEY (`bus_id`) REFERENCES business(`bus_id`),
FOREIGN KEY (`category_id`) REFERENCES categories(`category_id`)
)
然后您的搜索查询将类似于:
SELECT b.*
FROM business b, categories c, tbl_works_categories t
WHERE
b.bus_id = t.bus_id AND
c.category_id = t.category_id AND
c.category_id = *SOME SEARCH VALUE*
使用JOIN的将写为:
SELECT b.*
FROM business b
JOIN tbl_works_categories t
ON b.bus_id = t.bus_id
JOIN categories c
ON c.category_id = t.category_id
WHERE c.category_id = *SOME SEARCH VALUE*
答案 2 :(得分:0)
如果您希望所有与给定category-id相关的业务,您的SQL语句将如下所示:
SELECT `business`.`bus_name`
FROM `business`
WHERE `business`.`bus_id` = `tbl_works_categories`.`bus_id`
AND `categories`.`category_id` = `tbl_works_categories`.`category_id`
AND `categories`.`category_id` = 1;
在这种情况下,1
是您的食物类别,但可能是您的PHP变量,其中存储了用户所选类别的ID。
还有一个提示:一定要用plurar或单数命名表。你混合了两者,可能会感到困惑。