2 Stimmen

MySQL LEFT JOIN Problem - Fehlende LEFT Spalte

Ich habe Probleme mit einer SQL-Abfrage, die verwendet wird, um benutzerdefinierte Profilfelder und alle (optionalen) entsprechenden Werte anzuzeigen.

Hier ist die SQL-Abfrage, die ich verwende:

SELECT pf.`id`, pf.`name`, pv.`value` FROM `profile_fields` AS pf
LEFT JOIN `profile_values` AS pv ON (pf.`id` = pv.`field_id`)
WHERE (pf.`site_id` = '0' OR pf.`site_id` = '%d') AND (pv.`user_id` = '%d' OR pv.`user_id` IS NULL)
ORDER BY pf.`order` ASC

Das Problem, das ich habe, ist, dass alle Spalten ohne entsprechende profile_values Datensätze werden überhaupt nicht angezeigt, obwohl sie angezeigt werden sollten, sondern nur mit einem leeren Wert.

Vielen Dank!

7voto

Eran Galperin Punkte 84916

Versuchen Sie, die Bedingungen für die Profilwerte in die JOIN-Anweisung zu verschieben:

 SELECT pf.`id`, pf.`name`, pv.`value` FROM `profile_fields` AS pf
 LEFT JOIN `profile_values` AS pv ON (
         pf.`id` = pv.`field_id`  AND 
         (pv.`user_id` = '%d' OR pv.`user_id` IS NULL)
  )
 WHERE (pf.`site_id` = '0' OR pf.`site_id` = '%d')
 ORDER BY pf.`order` ASC

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X