我需要整理一些编码,以便工头找到他们需要用于不同城镇工作的砌砖工,并根据要完成的砌砖类型。
我设置了一个名为USERS的MySQL数据库表,其中包含每个用户的所有详细信息(包括寻找砌砖工和砖瓦工人的人),例如userid,first_name,last_name等。有3种主要类型的砌砖工存在:传统,建筑,铺路,板,路由,木板,装饰和变薄。我可能要稍后再添加。
我有另一张名为POSTCODES的表(或计划设置)。这里有大约1000个城镇邮政编码,每种类型的瓦工都有一个列。用于每个邮政编码的每个砌砖工的用户ID显示在每个砌砖类型中。每个砖块类型只能显示1个瓦工。
例如,Postcodes表的列和数据看起来像这样(或将会):
Postcode, traditional, architectural, pave, slab, routing, plank, decorative, thins
1003, 21, 34, 78, 98, 34, 77, 21
1004, 56, 45, 35, 98, 78, 23, 12
etc
数字21,34,78,98,34,77,21是用于不同邮政编码的砌砖工的用户ID。例如,如果我在邮政编码1003中需要一个变薄的砌砖工,我们需要的砌砖工的用户ID将是21.如果我需要邮政编码1003中的铺砖工,那么我需要78.如果我需要邮政编码1004中的平板砌砖工,那么我会需要98。
要提取他们需要使用的砌砖工的记录,我将使用从用户选择全部WHERE userid.users = ????这是我卡住的地方?基本上我需要能够为相关的bricklayer用户提取数据。在上面的例子中,我需要为用户21,78或98提取数据。
人们填写以找到合适的砌砖工的形式如下:
你需要什么类型的瓦工? 带选项的单选按钮或下拉菜单: 传统的,建筑的,铺路的,板,路由,木板,装饰,变薄
这份工作是什么邮政编码? 然后他们输入邮政编码。
下一页将显示(希望:)他们需要联系和使用的人的详细信息。
答案 0 :(得分:1)
从它的声音来看,你对PHP或MySQL没有多少经验。这是SQL 101.听起来你的架构完全是一团糟。这就是你应该拥有的(基本伪代码):
TABLE users (
id PK,
name,
...
);
TABLE types (
id PK,
name
);
TABLE postcodes (
code PK,
location_name,
...
);
TABLE bricklayers (
user_id FK to users,
type_id FK to types,
code FK to postcodes
) PK (type_id, code);
现在,砌砖工中的PK会将每个邮政编码的砌砖工类型数量限制为1.这意味着每个邮政编码只能获得一种类型。
要获取特定邮政编码中的砌砖工用户列表,请运行:
SELECT * FROM bricklayers WHERE code = {POSTALCODE};
这将为您提供所有砌砖工的Type_id和User_id。您可以将选择与连接结合使用,以便从每个表中提取信息而不仅仅是ID。但这应该可以让你到达目的地。
答案 1 :(得分:-1)
我建议使用 cdburgess 的解决方案。但是,如果您仍想使用您的方案,则可以使用此类查询
Select * from Users WHERE userid.users IN (
SELECT concat_WS(',', traditional, pave, decorative) as uid FROM `postcodes` WHERE postcode=1003
)
如果您需要一次搜索多个邮政编码,请添加 GROUP BY uid