Dominik: PHP/MySQL: Wert aus der DB auslesen und verknüpfen

Hallo zusammen,

folgende Fragestellung:

Ich möchte eine Joomla-Komponente anpassen und stoße hier bei einer Datenbankabfrage (MySQL) auf Probleme.

Die Komponente (DT Register) soll einen Wert aus der DB auslesen und in der Admin-Ansicht ausgeben.

  
 <?php  
  
		$k = 0;  
  
		$i = 0;  
  
		$fieldNameMap = $this->mUser->table->TableUserfield->Tablefield->mapNametoId();  
		  
        if($this->rows)  
		foreach($this->rows as $row){  
            $fee = $this->mUser->table->TableFee->findByUserId($row->userId);  
			  
			$name = array();  
  
			$link = 'index.php?option=com_dtregister&task=edit&controller=user&cid[]='. $row->userId;  
  
			$field_values = $this->mUser->table->TableUserfield->findByUserId($row->userId);  
			  
			$field_address = $field_values[$fieldNameMap['address']];  
			  
			$field_lastname = $field_values[$fieldNameMap['lastname']];  
			  
			$field_zip = $field_values[$fieldNameMap['zip']];  
			  
			$field_city = $field_values[$fieldNameMap['city']];  
			  
			$field_phone = $field_values[$fieldNameMap['phone']];  
			  
			$field_studiengang = $field_values[$fieldNameMap['studiengang']];  
			  
			$field_semester = $field_values[$fieldNameMap['semester']];  
  
			$name = array();  
            if(isset($field_values[$fieldNameMap['firstname']])){  
			 $name[] = $field_values[$fieldNameMap['firstname']];  
			}  
			$name = implode(" ",array_filter($name));  
			$email = "";  
			if(isset($field_values[$fieldNameMap['email']])){  
			$email = $field_values[$fieldNameMap['email']];  
			}  
  
		 ?>  

Das klappt bei obenstehendem Code auch (fast! ausschließlich) gut. Ausnahme ist die Abfrage des Studiengangs. Dieser ist in der DB-Tabelle (ufivb\_dtregister\_user\_field\_values) als Zahl hinterlegt. Die zugehörigen Werte liegen in einer anderen Tabelle (ufivb_dtregister_fields) und zwar als value durch Striche voneinandergetrennt: BW: Betriebswirtschaft|IB: Internationale Betriebswirtschaftslehre usw. (BW ist also 1, IB 2 usw.)

Wie müsste denn eine korrekte Abfrage aussehen, damit in meiner Übersicht nicht die Zahlen, sonder die dazugehörigen Werte auftauchen?

Herzlichen Dank schon mal für Unterstützung!

Viele Grüße
Dominik

  1. Tach!

    In welcher Beziehung steht der gezeigte PHP-Code zum Problem?

    Ausnahme ist die Abfrage des Studiengangs. Dieser ist in der DB-Tabelle (ufivb\_dtregister\_user\_field\_values) als Zahl hinterlegt. Die zugehörigen Werte liegen in einer anderen Tabelle (ufivb_dtregister_fields) und zwar als value durch Striche voneinandergetrennt: BW: Betriebswirtschaft|IB: Internationale Betriebswirtschaftslehre usw. (BW ist also 1, IB 2 usw.)

    Da stehen also "Felder" im Feld, getrennt mit |. Das ist zwar Mist, aber nicht unlösbar.

    Wie müsste denn eine korrekte Abfrage aussehen, damit in meiner Übersicht nicht die Zahlen, sonder die dazugehörigen Werte auftauchen?

    Diese Frage ist noch zu weit weg vom Problem. Näher dran wären Fragen wie: Kann man denn die ursprüngliche Query beeinflussen oder kann man nur mit der bereits gelieferten Zahl als Parameter eine neue Query starten? (Sicher geht beides, aber entscheiden muss man hier nach der Einschätzung, bei welcher Vorgehensweise sich die geringeren Bauchschmerzen ergeben.)

    Wie auch immer die Fragen bisher beantwortet wurden, in beiden Fällen muss die Zahl in den "Feld"wert umgesetzt werden. Das Problem dabei ist, dass PHP zwar ein explode() kennt, MySQL aber nicht (auch nicht unter dem Namen split). Es gibt da nur Workarounds (die mehr oder weniger gut arbeiten). Im Kommentarteil der String-Functions-Handbuchseite von MySQL sind zum Beispiel Lösungsvorschläge für dieses Problem (oder zumindest ähnliche) aufgeführt. Einfacher wird es, den Wert komplett zu holen und in PHP explode() und einen Array-Zugriff zu verwenden.

    dedlfix.