我正在使用 mysql / php / apache 。我有以下情况:
我需要比较一些信息的2个表,如果我使用INNER JOIN就没问题,但我的列中有问题。
表1 - > invoices_account
表2 - > invoices_payable
在 invoices_account 上我有以下字段:id, categ, categ_name, code, name, active, essential
在 invoices_payable 上,我有:id, ..(all my fields).. , reference
invoices_payable中我的字段引用的值与其他表invoices_account中的类和代码的值相同。它只在一个字段中连接在一起。
现在我只需报告基本帐户,我不知道如何从一个表中选择2个字段并将其与另一个表的1个字段进行比较。
我希望在我的解释中明确一点......但这是一种在该项目中没有计划的情况。现在我无法修改数据库的结构,因为我内部有大量数据。
有人知道如何解决这个热点问题吗? 非常感谢任何人。
我的旧查询是这样的,但不起作用,因为字段 categ 和代码需要连接才能与 referencia
SELECT SUM(ip.total) as total, ip.due_date, ip.status, ip.referencia
FROM invoices_payable ip
INNER JOIN invoices_account ON ip.referencia = invoices_account.code
WHERE due_date BETWEEN '$dinov' and '$dfnov'
AND invoices_payable.referencia = invoices_account.code
AND invoices_payable.status ='paid'
AND invoices_account.essential = 1
答案 0 :(得分:2)
您可以在join的ON子句中使用CONCAT()函数。
它可能非常慢,因为它无法在invoices_account_table上使用索引,但是功能上你应该能够使用这样的查询:
select ...
from invoices_account
inner join invoices_payable
on invoices_payable.reference = concat(invoices_payable.categ,invoices_payable.code);
答案 1 :(得分:1)
SELECT categ_name, ... FROM invoices_account
JOIN invoices_payable
ON CONCAT(invoices_account.categ, invoices_account.code) = invoices_payable.reference
答案 2 :(得分:0)
另一个问题回答。感谢。
最后我的查询看起来像这样
$sql = "SELECT SUM(invoices_payable.total) as total, invoices_payable.due_date, invoices_payable.status, invoices_payable.referencia, invoices_payable.status, invoices_account.essential \n"
. "FROM invoices_account \n"
. "INNER JOIN invoices_payable \n"
. "ON invoices_payable.referencia = concat(invoices_account.categ,invoices_account.code) \n"
. "WHERE due_date BETWEEN \'2010-11-01\' and \'2010-12-01\' \n"
. "AND invoices_payable.status =\'paid\' \n"
. "AND invoices_account.essential = 1";