首先,我想首先为潜在的错过领先的标题道歉......我发现很难描述我在这里想做什么。
对于我正在开发的当前项目,我们已经设置了一个带有MySQL的“动态”数据库结构,看起来像这样。
item_details
(描述item_data
)
fieldID | fieldValue | fieldCaption
1 | addr1 | Address Line 1
2 | country | Country
item_data
itemID | fieldID | fieldValue
12345 | 1 | Some Random Address
12345 | 2 | United Kingdom
正如您所看到的,如果我想查找项目12345的地址,我只需要执行该语句。
SELECT fieldValue FROM item_data WHERE fieldID=1 and itemID=12345;
但这里是我被卡住的地方......数据库相对较大,大约有大约80k行,我试图在PHP中创建一组搜索功能。
我希望能够尽快对查询的结果集执行查询...
例如,搜索特定国家/地区内的地址名称...即:使用与查询结果相同的itemID搜索结果的fieldValue
:
'SELECT itemID from item_data WHERE fieldID=2 and fieldValue='United Kingdom'..
对不起如果我不清楚,过去几天我一直在努力解决这个问题......
干杯
答案 0 :(得分:1)
您可以通过多种方式完成此操作。一种是对item_data表使用多个连接,其中fieldID仅限于您想要获得的任何内容。
SELECT *
FROM
Item i
INNER JOIN item_data country
ON i.itemID = country.itemID
and fieldid = 2
INNER JOIN item_data address
ON i.itemID = country.itemID
and fieldid = 1
WHERE
country.fieldValue= 'United Kingdom'
and address.fieldValue= 'Whatever'
除此之外,这种结构通常被称为Entry Attribute Value or EAV数据库
答案 1 :(得分:0)
如果这听起来很光顾,请提前抱歉,但(如你所说)我不太清楚你要求的是什么。
如果您正在寻找一个查询来完成整个事情,您可以简单地嵌套它们。对于您的示例,假装有一个名为CACHED的表,其中包含您的UK查询结果,并根据该查询编写您想要的查询,但将CACHED替换为您的英国查询。
如果你的想法是你已经完成了这个英国的查询,并想(重新)使用它的结果,你可以将结果保存到数据库中的表中(如果有大量的数据,这可能不实用)执行查询),或将ID列表保存为文本并将其粘贴到后续查询中(...(...)中的... WHERE ID),如果“缓存”查询为您提供可管理的查询,则可能没问题原始表的一部分。