MySQL从查询中获取查询

时间:2011-07-14 19:45:48

标签: mysql

我有以下MySQL查询,meta_key等于_cnote_module_numberpost_id等于$mod_id

但是现在我如何在post_id = '$mod_id'查看结果并找到meta_value(这是一个数字)之后添加到该查询,而不是回顾{{1} }等于meta_key并从第一个结果中获取大于_cnote_module_number的{​​{1}}。

meta_value

修改

我有2个表,第一个是postmeta,有..

meta_value

第二个是usermeta with ..

$query = ( "SELECT * FROM postmeta WHERE meta_key = '_cnote_module_number' AND post_id = '$mod_id'" );

我想确保------------------------------------- post_id | meta_key | meta_value ------------------------------------- 10 | jason | 1 49 | cnote | 3 56 | cnote | 2 97 | cnote | 7 ----------- mod_id ----------- 10 49 67 等于postmeta.meta_key = 'cnote'。比任何ID相同,我想获得usermeta.mod_id,然后找到大于该值的第一个数字。

在这个例子中,我希望结果是postmeta的第4行

1 个答案:

答案 0 :(得分:1)

你可以通过给它两个不同的名字来JOIN一个表。例如,以下内容将返回所有元数据,其中B表的meta_value大于A表的meta_value:

SELECT B.meta_value
FROM postmeta A
JOIN postmeta B
ON (    B.meta_value > A.meta_value
    AND A.meta_key = B.meta_key)
WHERE A.meta_key = 'cnote'
AND A.post_id = '$mod_id'

但是针对您的具体问题,我们需要 next meta_value。那更容易;因为您只想返回一行,所以可以从上面获取meta_values的MIN:

SELECT MIN(B.meta_value)
FROM postmeta A
JOIN postmeta B
ON (    B.meta_value > A.meta_value
    AND A.meta_key = B.meta_key)
WHERE A.meta_key = 'cnote'
AND A.post_id = '$mod_id'

如果你想获得一个返回所有对meta_values的查询,其中A.meta_value紧接在B.meta_value之前,我们也可以这样做;让我知道。