2016-10-02 1 views
0

Derzeit ist die Verwendung von folgenden:Konzernergebnis von UserID erstellen dann Array von Spaltendaten

SELECT o.*, u.* 
FROM Owned o 
INNER JOIN Users u USING (UserID) 

Benutzer „eigene“ divs, besitzen einige können mehr als andere, und ich möchte ihre Benutzer-ID auf ein erzeugtes anzuwenden div. So zum Beispiel Benutzer 123 kann divs 3b und 5c besitzen, so möchte ich etwas tun:

#3b,#5c { 
    background: url($row['logo']); 
} 

Zur Zeit habe ich es zu tun folgendes:

#3b { 
    background: url(<?=$row['logo']?>); 
} 
#5c { 
    background: url(<?=$row['logo']?>); 
} 

Das bedeutet eine Menge machen unnötige Aufrufe an die Datenbank. Wie würde ich mich am besten über eine Reihe von $row['ownedID'] Aufbau der folgenden für jeden Benutzer zu tun:

foreach user { 
    #<?=$ownedID[]?>{ 
     background: url(<?=$row['logo']?>) 
    } 
} 

Antwort

0

Ist das, was Sie wollen?

SELECT UserId, GROUP_CONCAT(o.div) as divs 
FROM Users u INNER JOIN 
    Owned o 
    USING (UserID) 
GROUP BY UserId; 

Dies verkettet die divs in eine einzige Zeichenfolge.

Sie können nur einen Charakter vor, wenn Sie möchten:

SELECT UserId, GROUP_CONCAT('#', o.div) as divs 
FROM Users u INNER JOIN 
    Owned o 
    USING (UserID) 
GROUP BY UserId; 

GROUP_CONCAT() verkettet seine erste Argumente zusammen, ohne die Notwendigkeit für eine explizite CONCAT().

+0

Sehr, sehr fast! Das gibt die Ergebnisse als '3b, 5c, 7g' usw. aus. Ist es möglich, ohne preg_replace '3b, # 5c, # 7g' zu verwenden? – BN83

Verwandte Themen