我有一个索引表,每个记录都有一个recordid和一个datatype字段 我还有4个数据表都具有相同的字段。 如何从索引表中检索x记录并根据数据类型的值,将THAT记录连接到相应的数据表并将整个批次返回到单个记录集中? 例如: indexrec1具有recordid = 12和datatype = text,其余字段将来自文本表中对应于recordid = 12的文本表。 indexrec2的recordid为9,datatype = image,其余字段将来自imaged = 9对应的图像表。
这将在PHP下的Apache服务器上运行。 请保持温和,我不是MySQL专家 - 如果可能的话,“白痴指南”的答案会很棒......
答案 0 :(得分:0)
您需要的是一个带有连接的查询,以链接您需要的每个表
例如:
select rec1.indexrec1,rec2.* from rec1
inner join [text table] as rec2 on
rec1.indexrec1 = rec2.indexrec2
我在做什么?好吧,我通过内部联接使用indexrec列链接它们来显示表[rec1]
中的索引和[text table] as rec2
中的所有列。
但是有一个问题,使用inner join
只会显示符合此条件的记录rec1.indexrec1 = rec2.indexrec2
。
根据您的真实需要,您可以使用不同的Joins
详细了解cordova-android-support-gradle-release
中的join
答案 1 :(得分:0)
对每个表执行单独查询,并将它们与UNION
合并。
SELECT *
FROM indexTable AS i
JOIN textTable AS t ON i.recordId = t.recordId
WHERE i.datatype = 'text' AND i.recordId = 12
UNION ALL
SELECT *
FROM indexTable AS i
JOIN imageTable AS im ON i.recordId = im.recordId
WHERE i.datatype = 'image' AND i.recordId = 12
为所有类型继续此模式。
但如果所有数据表都有相同的字段,为什么将它们作为单独的表?
答案 2 :(得分:0)
它确实“有效”,但没有给出预期的结果。
我创建了一个索引表,一个文本表和一个nums表 - 后者2具有相同的字段名。
然后我创建了2个索引记录,一个用于访问文本表中的记录,另一个用于访问nums表中的记录。 (在文本和nums中创建记录)
然后我运行了以下sql:
选择
test_index
。test_id
,test_index
。datatype
,test_index
。externalrecid
,test_index
。{{1} },something
。test_nums
,rec_id
。test_nums
,datatype
。test_nums
,value1
。test_nums
,valu2
。test_text
,rec_id
。test_text
,datatype
。test_text
,value1
。test_text
FROM {{ 1}} LEFT JOINvalu2
ONtest_index
。test_nums
=test_nums
。datatype
LEFT JOINtest_index
ONdatatype
。{{ 1}} =test_text
。test_text
然后我在php脚本中运行相同的sql并打印生成的行并得到了这个:
数组([test_id] => 1 [数据类型] => text [externalrecid] => 1 [something] => indextable [rec_id] => 1 [value1] =>文本值1 [ valu2] =>文本值2)
数组([test_id] => 2 [datatype] => [externalrecid] => 1 [something] =>应为nums [rec_id] => [value1] => [valu2] = >)
如您所见,在第二个数组(记录集)中,缺少字段的值。
因此,我得出结论,给定字段名称的第二个值会覆盖第一个值,因此我无法使用此方法。
在第二个数组转储中,我需要的值位于第一组字段名称中,但它们会被第二组的NULL值覆盖。不好!!!
但好的一面是:
如果我更改字段名称,使它们在辅助表中都是唯一的,我将从所有表中获取所有字段。
更好的消息是,所有不需要的字段(虽然存在)都有一个NUL值,这意味着整个记录集的大小(以字节为单位)将大大减少,这是我开始时的最初目标。 / p>
我的(本土)模板引擎需要进行修改,以便在将值解析到模板之前测试字段的值(处理中减少了近75%)并且应该加快一切(我的次要目标)
感谢所有参与者 - 希望这对未来的其他人有所帮助 - 正如我前面所说,我不是MySQL专家......