使用多行的MySQL查询搜索

时间:2011-03-29 19:02:17

标签: mysql row

首先,我想首先为潜在的错过领先的标题道歉......我发现很难描述我在这里想做什么。

对于我正在开发的当前项目,我们已经设置了一个带有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'..

对不起如果我不清楚,过去几天我一直在努力解决这个问题......

干杯

2 个答案:

答案 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),如果“缓存”查询为您提供可管理的查询,则可能没问题原始表的一部分。