基于DATA
的关系中,我有2个表IMAGES
和item_number
。
DATA
中的记录每个都有IMAGES
收集的3条记录。
例如,item_number
010050的记录与IMAGES
中的这些记录相关联:
在DATA中的相应记录中,我有以下字段:
main
table
drawing
我的目标是在DATA中设置字段,如:
我试过了:
ExecuteSQL("SELECT filename FROM images WHERE filename = ?"; ""; ""; "010050_drawing")
谁可以给我一个暗示?
答案 0 :(得分:0)
老实说,除非你的内容比你所描述的更多,否则你就太难了。
如果每条DATA记录总是有3条IMAGE记录,特别是如果您想将每张图像直接关联到特定类型,则不需要IMAGE表。一个更简单的解决方案是在DATA表中添加3个容器字段(例如,main_image,table_image,drawing_image)。您不需要SQL或门户网站,您也不必担心将相关图像与其类型相关联。
OTOH,如果你真的需要一个单独的表,考虑硬连接三个专用的1:1关系,每个图像类型一个。为此,在DATA:(main_image_id等)中添加3个特殊键字段,并为每个图像类型创建一个关系,每个图像类型都在这些字段之一和主IMAGE之间。然后,每当您创建DATA记录和3个相关的IMAGE记录时,将匹配图像的键放在匹配的DATA :: xxx_image_id字段中。这样,您就拥有了干净的1:1关系,并且每个相关图像都会被锁定到其类型。
答案 1 :(得分:0)
感谢您的回复
我需要这些字段中的图像值才能将其导出到XML和InDesign(进入表格单元格)。
问题是我知道文件名,即item_number后跟_drawing或_table,但不知道正手上的扩展名(许多文件和来自不同的来源)
因此,文件格式不同
我现在的解决方案是:
- 导入相关的所有图像(item_number,他也是文件名的一部分)一个FMP表
- 我计算了文件是表格,图纸还是插图,并将这些值放在“亲切”字段中:
Case (
PatternCount ( filename ; "_drawing." ) ;
"drawing" ;
PatternCount ( filename ; "_table." ) ;
"table" ;
Length ( filename )=10 ;
"main" ;
""
)
- 然后我在每个字段中进行查询,主表 - 绘图。下面的一个是“表格”字段中的计算。
ExecuteSQL("
SELECT path_xml
FROM images
WHERE item_number = ? and kind = ?";
"";""; item_number ; "table"); ""
)
也许有点笨拙,但它现在有效。
答案 2 :(得分:0)
我无法弄清楚如何在xslt中做到这一点。
举一个简单的例子,假设您已从Data
表导出,导出中只包含两个字段:Data::ItemNumber
和Images::FileName
。您的原始导出将看起来像这样(显示两个记录):
<强> XML 强>
<?xml version="1.0" encoding="UTF-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="" NAME="FileMaker" VERSION=""/>
<DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ItemNumber" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Images::FileName" TYPE="NUMBER"/>
</METADATA>
<RESULTSET FOUND="2">
<ROW MODID="0" RECORDID="1">
<COL>
<DATA>010050</DATA>
</COL>
<COL>
<DATA>010050.eps</DATA>
<DATA>010050_table.tif</DATA>
<DATA>010050_drawing.png</DATA>
</COL>
</ROW>
<ROW MODID="0" RECORDID="2">
<COL>
<DATA>2345</DATA>
</COL>
<COL>
<DATA>2345_extra.gif</DATA>
<DATA>2345_table.gif</DATA>
<DATA>2345_drawing.jpg</DATA>
<DATA>2345.tiff</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
请注意第二条记录中的不同顺序以及额外图像。
应用以下样式表后:
<强> XSLT 强>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fmp="http://www.filemaker.com/fmpxmlresult"
exclude-result-prefixes="fmp">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
<xsl:variable name="item-no" select="fmp:COL[1]/fmp:DATA"/>
<item>
<number>
<xsl:value-of select="$item-no"/>
</number>
<main>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '.'))]"/>
</main>
<table>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '_table.'))]"/>
</table>
<drawing>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '_drawing.'))]"/>
</drawing>
</item>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
你会得到:
<强>结果强>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item>
<number>010050</number>
<main>010050.eps</main>
<table>010050_table.tif</table>
<drawing>010050_drawing.png</drawing>
</item>
<item>
<number>2345</number>
<main>2345.tiff</main>
<table>2345_table.gif</table>
<drawing>2345_drawing.jpg</drawing>
</item>
</root>