从IN子句查询

时间:2016-08-06 16:13:50

标签: php mysql

我正在尝试找到一种从查询中的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>';

                }

非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

如果列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的情况。

答案 1 :(得分:0)

这个查询有点困惑,这应该可行

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

请记住,如果您使用的是双引号字符串标量变量只是扩展为它们的值,但在使用数组时,您必须忘记" $row[guid] "之类数组周围的引号或使用{}像我上面那样在阵列周围。

但是

  

请不要使用the mysql_ database extension,它   不推荐使用(在PHP7中永远消失)特别是如果您只是学习PHP,请花费精力学习PDO数据库扩展。   Start here非常简单

答案 2 :(得分:0)

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'不是一个词。