从IN子句查询中获取一个值


Get an value from IN clause query

我正在尝试从查询中的IN子句中获取值。我要查找的列是"contentAvailability"表中的"viewURL"。

$availableProvidersSQL = mysql_query("SELECT * FROM contentProviders 
                WHERE 
                code IN (SELECT providerCode FROM contentAvailability WHERE contentGuid = '".($row['guid'])."')
                ORDER BY firendlyName") or die(mysql_error());
                while($availableProvidersRow = mysql_fetch_array($availableProvidersSQL)) {
                        echo '<div class="col-lg-12 col-md-12 col-sm-6 col-xs-6" style="padding-bottom:7px;">
                        <figure>
                        <a href="#"><img src="'.$baseURL.'images/providers/'.$availableProvidersRow['code'].'/Logo.jpg" class="providerLink"></a><br />
                        </figure>
                        </div>';
                }

如有任何帮助,将不胜感激

如果列contentGuid对contentAvailability和contentProviders都是通用的,那么为什么不使用JOIN呢?

SELECT 
    pv.*, 
    av.viewUrl 
 FROM contentAvailability av 
 JOIN contentProviders pv ON pv.contentGuid = av.contentGuid AND av.providerCode = pv.code 
WHERE av.contentGuid = $row['guid']
ORDER BY av.friendlyName

如果contentGuid对两个表都不通用,那么您可以执行这样的JOIN:

SELECT 
    pv.*, 
    av.viewUrl 
 FROM contentAvailability av 
 JOIN contentProviders pv ON av.providerCode = pv.code    
WHERE av.contentGuid = $row['guid']
ORDER BY av.friendlyName

如果我缺少什么,请告诉我。

已编辑以显示contentGuid对两个表都不通用的情况。

这个查询有点混乱,这应该能在中工作

$availableProvidersSQL = mysql_query(
           "SELECT * FROM contentProviders 
            WHERE 
            code IN (
                      SELECT providerCode 
                      FROM contentAvailability 
                      WHERE contentGuid = '{$row['guid']}'
                     )
            ORDER BY firendlyName") 
    or die(mysql_error());

请记住,如果您使用的是双引号字符串,标量变量只需扩展到其值,但当使用数组时,您必须忘记数组周围的引号occuranec(如" $row[guid] "(,或者使用数组周围的{}(如上文所述(。

但是

请不要使用mysql_数据库扩展,它被弃用(在PHP7中永远消失(特别是如果你只是在学习PHP,那么就要花精力学习PDO数据库扩展。从这里开始它真的很容易

SELECT x.columns
     , x.I
     , x.actually
     , x.want
  FROM contentProviders x
  JOIN contentAvailability y
    ON y.providerCode = x.code       
 WHERE y.contentGuid = '{$row['guid']}'
 ORDER 
    BY x.firendlyName;

请注意,"firendly"不是一个词。