2016-08-06 3 views
0

Ich versuche, einen Weg zu finden, um einen Wert von der IN-Klausel in meiner Abfrage zu erhalten. Die Spalte, die ich suche, ist "viewURL" in der Tabelle "contentAvailability".Holen Sie einen Wert von IN-Klausel Abfrage

$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>'; 

       } 

Jede Hilfe sehr

+0

Die Frage ist ein bisschen unklar. Können Sie Ihre Tabellenstrukturen, einige Beispieldaten und das Ergebnis, das Sie für dieses Beispiel erhalten möchten, freigeben? – Mureinik

+0

Bitte verwenden Sie nicht [die MySQL-Datenbankerweiterung] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php), es ist veraltet (für immer gegangen in PHP7) Speziell, wenn Sie nur PHP lernen, verbringen Sie Ihre Energie zu lernen, die 'PDO' Datenbank-Erweiterungen. [Start hier] (http://php.net/manual/en/book.pdo.php) es ist wirklich ziemlich einfach – RiggsFolly

Antwort

2

Wenn die Spalte contentGuid sowohl contentAvailability und contentProviders üblich ist, warum dann nicht ein JOIN verwenden?

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 

Wenn contentGuid in beiden Tabellen nicht üblich ist, dann kann man ein so machen 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 

Bitte lassen Sie mich wissen, ob es etwas, was ich bin fehlt.

Bearbeitet, um den Fall anzuzeigen, in dem contentGuid nicht für beide Tabellen gemeinsam ist.

0

Diese Abfrage ein wenig verwirrt bekommen hat geschätzt würde, dieses

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

Denken Sie daran arbeiten sollte, wenn Sie ein doppeltes Anführungszeichen Skalarvariablen einfach erweitert werden verwenden ihr Wert, aber wenn Sie ein Array verwenden, müssen Sie entweder die Anführungszeichen um das Array occurranec wie " $row[guid] " vergessen oder {} um das Array verwenden, wie ich oben habe.

Aber

nicht Bitte verwenden the mysql_ database extension, es ist veraltet (immer in PHP7 gegangen) besonders wenn Sie nur PHP lernen, Ihre Energien ausgeben, um die Erweiterungen PDO Datenbank zu lernen. Start here sein wirklich ziemlich einfach

+0

JOIN wäre toll, aber ich beantwortete die Fragen wie gefragt. OP lernt offensichtlich, also habe ich beschlossen, sie nicht mit Optionen zu überspielen und zu verwirren. – RiggsFolly

+0

@Strawberry Ich stellte mir vor, dass OP auf dem Kapitel war, das ihnen über die 'IN()' -Klausel lehrte, daher wäre eine Antwort, die den Gebrauch von JOIN nahe legt, irrelevant – RiggsFolly

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; 

Beachten Sie, dass "firendly" kein Wort ist.

Verwandte Themen