【问题标题】:Select rows from a table based on another row in the same table根据同一表中的另一行从表中选择行
【发布时间】:2021-08-04 16:34:25
【问题描述】:

我有一个表格,其中包含有关多个住宅物业的详细信息。 表中只有 4 列,命名如下。

ID = 唯一标识符

tmplvarid = 有点像记录类型代码。即地址,价格, 状态、图像等......(可能有 20 种不同的记录类型)

Contentid = 用于对属于同一属性的记录进行分组。

= 记录的实际详细信息。

例如,我需要为状态为“已售出”的属性记录选择一些字段。如果我可以将两个包含相关信息的表连接起来,但信息都在一个表中,这对我来说是有意义的。

我可以看到这种数据结构可以很容易地向应用程序添加新字段而无需更改表,但我不知道如何查询表以返回相关信息。

任何指向正确方向的指针?

谢谢 大卫。

编辑 以下是与一项财产相关的所有记录的示例。显然,有许多具有不同属性 ID 的属性。 (示例属性 ID 183)

作为示例,我想为所有属性选择街道编号 (varid=34)、街道名称 (varid=39) 和图像名称 (varid=36) 已“已售出”(varid=106)

我希望我的问题现在更有意义。

PS 我确实尝试过研究这个问题,但我尝试的 SQL 不值得发布。 我考虑过嵌套的 Select 语句或将表链接到自身。我还找了其他人解决了类似的问题但没有找到任何人。

预期输出:

3758    34  183 2/150
3759    39  183 SMITH STREET
3779    36  183 [{"MIGX_id":1,"ImageID":"1","FileName":"00686_01.jpg","ImageSrc":"assets\/images\/properties\/00686_01.jpg","AltImage":"00686_01.jpg","TimeModified":"26 Jul 2013 11:12:52","Format":"Photograph"},{"MIGX_id":2,"ImageID":"2","FileName":"00686_02.jpg","ImageSrc":"assets\/images\/properties\/00686_02.jpg","AltImage":"00686_02.jpg","TimeModified":"26 Jul 2013 11:12:52","Format":"Photograph"},{"MIGX_id":3,"ImageID":"3","FileName":"00686_03.jpg","ImageSrc":"assets\/images\/properties\/00686_03.jpg","AltImage":"00686_03.jpg","TimeModified":"26 Jul 2013 11:12:52","Format":"Photograph"

================================================ =======================

id      varid   contid  value
3756    32  183 686
3757    33  183 Rent
3758    34  183 2/150
3759    39  183 SMITH STREET
3760    40  183 FAIR FEILD
3761    41  183 2165
3762    42  183 NSW
3763    51  183 Residential
3764    52  183 Unit
3765    61  183 300
3766    62  183 W1
3767    63  183 2015-1-6 ::
3768    66  183 Yes
3769    110 183 18
3770    106 183 Sold
3771    107 183 2015-1-20 10:27:25
3772    35  183 2
3773    76  183 1
3774    79  183 1
3775    95  183 1
3776    96  183 Communal
3777    104 183 1
3778    105 183 1
3779    36  183 [{"MIGX_id":1,"ImageID":"1","FileName":"00686_01.jpg","ImageSrc":"assets\/images\/properties\/00686_01.jpg","AltImage":"00686_01.jpg","TimeModified":"26 Jul 2013 11:12:52","Format":"Photograph"},{"MIGX_id":2,"ImageID":"2","FileName":"00686_02.jpg","ImageSrc":"assets\/images\/properties\/00686_02.jpg","AltImage":"00686_02.jpg","TimeModified":"26 Jul 2013 11:12:52","Format":"Photograph"},{"MIGX_id":3,"ImageID":"3","FileName":"00686_03.jpg","ImageSrc":"assets\/images\/properties\/00686_03.jpg","AltImage":"00686_03.jpg","TimeModified":"26 Jul 2013 11:12:52","Format":"Photograph"}]
3780    128 183 assets/images/properties/00686_01.jpg
3781    119 183 [{"MIGX_id":1,"InspectionID":"1","InspectionDate":"Sat, 24 Jan 2015","InspectionStart":"15:30:00","InspectionEnd":"15:45:00"}]
3782    120 183 18
3783    121 183 Bob Jobbins
3784    122 183 9735 9999
3785    124 183 0406619999
3786    125 183 email@domain.com
3787    126 183 Active
3788    127 183 20 Jan 2015 10:27:25

【问题讨论】:

  • 能否请您在这里输入您的输入表记录或预期结果

标签: mysql


【解决方案1】:

将信息放在一个表中没问题:您可以将表连接到自身。像这样的东西应该可以工作:

SELECT
  sold.ContentID,streetno.Value StreetNo,streetname.Value Street,imagename.Value ImageName
 FROM properties sold
JOIN properties streetno ON streetno.tempvarid=34 AND streetno.ContentID=sold.ContentID
JOIN properties streetname ON streetname.tempvarid=39 AND streetname.ContentID=sold.ContentID
JOIN properties imagename ON imagename.tempvarid=36 AND imagename.ContentID=sold.ContentID

上述内容可能存在语法或类似问题。我没有时间对它进行实际测试,因为我需要去获得一些具体的东西,但我相信这种方法会解决你的问题。

【讨论】:

  • 这是我不去测试你的代码的最好理由。 “我需要去拿一些具体的东西”我很高兴测试它,希望我能够理解它在做什么。谢谢大卫。
  • 嗨,吉姆,成功了!字段名称有一个小错字,我不得不添加“Select Distinct”,因为它为每个属性返回 35 行并停止在 1000 个结果。下次我跑的时候真的很慢。我会说超过 1 分钟,我希望它会超时。 (我有一个老旧的服务器)但是以下和后续运行,执行时间几乎是即时的。所以我猜所有这些连接都使得计算初始执行计划变得困难。其中两列有索引。 (tmplvarid 和满足)再次感谢
  • @DavidPollard 在随后的运行中,您已经预热了缓存,甚至可能查询缓存,所以它通常会快得多。但是您应该在 (tempvarid, ContentID) 上设置索引 (one, multicolumn) 以使其真正更快。您可以使用EXPLAIN 查看实际的执行计划。
猜你喜欢
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 2020-07-28
  • 1970-01-01
  • 2020-02-16
相关资源
最近更新 更多