【发布时间】:2009-01-22 16:18:41
【问题描述】:
任何人都可以帮助我尝试编写 SQL (MS SqlServer) - 我必须承认这不是最好的技能。
我想要做的功能与 Yell website 的搜索框显示的功能完全相同,即
搜索公司类型
AND/OR 公司名称
和/或输入公司名称
在某个位置
如果有人能推荐您需要编写的 SQL 代码,以便获得与 Yell 相同的功能,那就太好了。
【问题讨论】:
标签: sql sql-server-2005
任何人都可以帮助我尝试编写 SQL (MS SqlServer) - 我必须承认这不是最好的技能。
我想要做的功能与 Yell website 的搜索框显示的功能完全相同,即
搜索公司类型
AND/OR 公司名称
和/或输入公司名称
在某个位置
如果有人能推荐您需要编写的 SQL 代码,以便获得与 Yell 相同的功能,那就太好了。
【问题讨论】:
标签: sql sql-server-2005
通常,一个人会做这样的事情:
-- All these are NULL unless provided
DECLARE @CompanyType AS varchar
DECLARE @CompanyName AS varchar
DECLARE @Town AS varchar
SELECT *
FROM TABLE_NAME
WHERE (@CompanyType IS NULL OR COMPANY_TYPE_COLUMN LIKE '%' + @CompanyType + '%')
AND (@CompanyName IS NULL OR COMPANY_NAME_COLUMN LIKE '%' + @CompanyName + '%')
AND (@Town IS NULL OR TOWN_COLUMN LIKE '%' + @Town + '%')
或者这个(只匹配带有通配符的列的开头):
-- All these are NULL unless provided
DECLARE @CompanyType AS varchar
DECLARE @CompanyName AS varchar
DECLARE @Town AS varchar
SELECT *
FROM TABLE_NAME
WHERE (@CompanyType IS NULL OR COMPANY_TYPE_COLUMN LIKE @CompanyType + '%')
AND (@CompanyName IS NULL OR COMPANY_NAME_COLUMN LIKE @CompanyName + '%')
AND (@Town IS NULL OR TOWN_COLUMN LIKE @Town + '%')
【讨论】:
您能否提供运行 sql 的数据库布局(模式)?有必要给你一个准确的结果。
但一般来说你要找的是
SELECT * FROM tablename WHERE companyType = 'type' OR companyName = 'companyName'
【讨论】:
您首先需要的不是 SQL 代码,而是数据库设计。只有这样,开始写 SQL 才有意义。
与 Yell 的功能相匹配的简单表架构可能类似于:
CREATE TABLE Company (
company_id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
company_name VARCHAR(255) NOT NULL,
location VARCHAR(255) NOT NULL
)
然后你会使用 SQL 来按名称搜索它:
SELECT * FROM Company WHERE company_name like '%text%'
或按位置:
SELECT * FROM Company WHERE location = 'Location'
当然,真实世界的位置搜索必须使用确切的城市和州,或邮政编码查找,或它们的某种智能组合。然后一个真正的表格会有更多的字段,比如描述等。但这是基本的想法。
【讨论】: