2015-10-21 141 views
0

想知道是否有可能改变这段代码的长度而不改变变量的功能,它的时间长了而且可能让别人难以理解。如何缩短或更改此代码?

$lch = "SELECT worth FROM credit 
    INNER JOIN rawdate ON credit.card_id=_rawdate.card_id 
    WHERE credit.card_id= 
     (SELECT card_id FROM rawdate 
     ORDER BY id DESC LIMIT 1 
     )"; 

数据库表名是:

信用:ID,card_id的,价值

rawdate:ID,card_id的

+1

是否需要'rawdate'的内部连接?就像...你是否因为这个连接而丢失记录?否则,摆脱它。此外,您是否从此查询中获得多个记录?如果没有,那么你可以切换到'SELECT ... FROM ... ORDER BY rawdate.id DESC LIMIT 1'。在不知道数据的情况下提供更多帮助是非常困难的。 – JNevill

+1

这不是一个令人困惑的查询。它非常简短。就像JNevill说的那样,你可以写出'SELECT value FROM FROM credit c',其中card_id =(通过id desc limit 1从rawdate order中选择card_id)' – zedfoxus

+0

只需要澄清一下,它看起来像代码说信用表包含“值“列但数据库表格说明表示它包含一个”值“列。 –

回答

1

如果我理解问题正确,这个SQL查询应该产生相同的结果:

select worth 
from credit 
    inner join rawdate on credit.card_id = rawdate.card_id 
order by rawdate.id desc 
limit 1 

本质上,如果您刚刚通过ID获取第一个rawdate行并使用其相应的card_id从具有相同card_id的相应信用额度获取值域,那么只需按照以下顺序排列连接表的结果rawdate ID并抓取第一行的值域应该会产生相同的结果。

如果您需要任何其他信息或帮助,请让我知道。

0
SELECT worth 
FROM credit 
INNER JOIN rawdate 
ON credit.card_id= rawdate.card_id 
INNER JOIN (SELECT MAX(id) id FROM rawdate) r_max 
ON r_max.id = rawdate.id