2016-12-29 3 views
0

Ich weiß, dass dies entweder left join oder left outer join oder etwas ähnliches verwenden, aber diese Art von Abfragen immer mich abstoßen.SQL: Kombinieren zwei ausgewählte Abfragen, mit Ergebnissen aus der ersten

Ich habe zwei Tabellen:

Kategorien

ID CatName   CatSlug 
1  Big Shirts  big-shirts 

Artikel

ID ItemName   Category Price ... 
1  Big Red Shirt 1   20.00 

Also ich versuche, alle Elemente in einer bestimmten Kategorie zurückzukehren, von der Kategorie Slug abgefragt. Ich muss auch den Kategorienamen zurückgeben. So, jetzt meine beiden Abfragen sind wie:

$return = array(); 

$query = "SELECT * FROM categories WHERE CatSlug = :CatSlug LIMIT 1"; 

$param = array(
    'CatSlug' => $slug 
); 

$result = $this->Db->selectOne($query, $param); 

if ($result) { // If result exists 

    $return['Category'] = $result['CatName']; // Need to return cat name 

    $query = "SELECT * FROM items WHERE Category = :Category"; 

    $param = array(
     'Category' => $result['ID'] 
    ); 

    $result = $this->Db->selectAll($query, $param); 

    if ($result) { // If result exists 

     $return['Items'] = $result; 

    } else { // If result does not exist 

     $return['Items'] = array(); 

    } // End if result does not exist 

} 

return $return; 

Also, ich bin wieder ein Array mit zwei Schlüsseln: Category enthält den CatName Wert in der categories Tabelle und Items enthält ein Array aller Elemente innerhalb dieser Kategorie, oder ein leeres Array, wenn es keine gibt.

Wie kann ich diese beiden Abfragen kombinieren?

+0

Wenn join "immer wirft dich aus", Sie Sie müssen einige gute Tutorials lesen, denn eine erfolgreiche Datenbanknutzung erfordert, dass Sie sie verstehen. – Barmar

+0

@Barmar Ich weiß das. Wenn ich ein "gutes" Tutorial finden könnte, würde ich es tun. Ich habe viele gelesen, aber von dem, was ich gefunden habe, machen sie alle einen schlechten (meiner Meinung nach) Job, es richtig zu erklären. – JROB

+0

Ein guter Anfang: https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – Barmar

Antwort

0
  1. Zunächst sollten Sie LEFT JOIN zwischen Tabelle page_categories und Elemente verwenden.
SELET * FROM page_categories p 
LEFT JOIN items i ON p.category = i.id 
WHERE c.CatSlug = :CatSlug 
  1. Loop in Ergebnisse und Rück Daten
$return['CatName'] = :CatSlug 
$return['Items'] = array (can be empty array) 
Verwandte Themen