我正在尝试执行查询的ColdFusion查询。第一个查询$sheet = 'public/site.xls';
// load excel content
$excel = Excel::load($sheet, function ($reader)
{
$results = $reader->toObject();
foreach($results as $result)
{
// i want to know how to retrieve active cell index here
}
});
返回多条记录。其中一行是:
qEL
上面的注释:WSBusinessUnit值为216000012,WSTREAMOBJ为32103,WSTREAMSUB为1759
第二个查询是ELINKACCOUNTNUMBER WINACCNT WSTREAMBUSINESSUNIT WSTREAMOBJ WSTREAMSUB
101-40001-0000-15-001-00000-0000 216000012.32103.1750 216000012 32103 1750
,它确实返回了一堆记录,但只有一行符合上面的记录,列名分别为qEL2
,First
和Second
所以我需要做一个连接或者其他什么,这是我的代码:
Third
但是这个查询不会返回任何内容。我应该以某种方式加入吗?
谢谢!
编辑1:也许有些像这样的语法? Having trouble with a SQL Join in ColdFusion
答案 0 :(得分:1)
开始改变这类事情:
qEL.WSTREAMBUSINESSUNIT = <cfqueryparam value="#qEL2.First#" CFSQLType="cf_sql_varchar" />
到这种类型的东西
qEL.WSTREAMBUSINESSUNIT = qEL2.First
查询参数将您的联接限制为qEL2的第一条记录。可能弄乱你的其他东西是空白。确保这些值都不具有前导或尾随空格。
答案 1 :(得分:1)
为了扩展Dan的答案,有一些问题可能阻止代码工作:
比较两列时,请勿使用井号或cfqueryparam
。该语法最终会将一列中的值与单个 literal 值进行比较。例如:
WHERE qEL.someID = 2
WHERE qEL.firstName = 'Bob'
要将一列中的所有值与所有中的值进行比较,请使用以下语法:
WHERE someQuery1.ColumnName = otherQuery2.ColumnName
QoQ非常简陋。它们仅支持一小部分SQL,不包括外连接或字符串函数(如trim()
)。如果需要,必须在原始数据库查询中完成。
“First”这个词很可能是一个保留字,必须是escaped with square brackets。
与某些数据库不同,QoQ's are case-sensitive中的字符串比较。
与ColdFusion的其余部分不同,查询查询区分大小写。 但是,Query of Queries支持两个字符串函数
UPPER()
和LOWER()
,您可以使用它来实现不区分大小写的匹配。
同样,字符串比较对差异过于敏感。因此请注意额外的空白区域,因为即使是单个标签或空格也会阻止匹配。
可能不适用于此处,但检查数据类型差异。比较具有不同数据类型的列时,QoQ必须首先将两列转换为相同的数据类型。不要依赖隐式转换。如果需要,请使用显式CAST()将列转换为适当的数据类型。例如:
WHERE CAST(someQuery1.ColumnName AS INTEGER) = CAST(otherQuery2.ColumnName AS INTEGER)
WHERE CAST(someQuery1.ColumnName AS VARCHAR) = CAST(otherQuery2.ColumnName AS VARCHAR)
最后,从小做起。首先匹配单个列,然后检查结果。如果有效,请转到下一个。否则,请检查列数据类型和值以尝试找出事物不匹配的原因。请记住,浏览器以折叠空白区而闻名,因此如果需要,请逐个字符检查值。
答案 2 :(得分:1)
根据@Dan Bracuk和@Leigh的反馈/回答解决问题。谢谢大家!
不归还问题主要与QEL2的Third
列有空白值有关。所以,在QEL2中,我把它放在WHERE子句中:
And length(RTRIM(GMSUB)) > 2
而且,是的,我将查询中的列名从第一,第二,第三更改为更有意义的:)
因此,WHERE子句现在会强制在最终查询中查询一些值。这是最后的查询 - 再次,列名已被更改。
<cfquery name="qFinal" dbtype="query">
SELECT
qEL.ELINKACCOUNTNUMBER AS ELAccountNum, qEL.WINACCNT AS WSAccountNum, qEL2.Description AS DESCRIPTION, qEL2.Posting_Edit_Code AS Posting_Edit_Code
FROM
qEL, qEL2
WHERE
CAST(qEL.WSTREAMBUSINESSUNIT AS INTEGER) = CAST(qEL2.WSBusinessUnit AS INTEGER)
AND
CAST(qEL.WSTREAMOBJ AS INTEGER) = CAST(qEL2.WSBusinessObject AS INTEGER)
AND
CAST(qEL.WSTREAMSUB AS INTEGER) = CAST(qEL2.WSBusinessSub AS INTEGER)
</cfquery>
谢谢大家!我的回答肯定是您的反馈/输入的组合。