Seite 1 von 1

Schleife Datenbankabfrage

Verfasst: 11.08.2009 12:16
von Dagtor
Ich brauche mal wieder hilfe....

Ich würde gerne eine abfrage mit verschieden Werten verschiedener Datensätze starten...
Da ich aber noch vor der Übergabe ans Template mit den Daten einige berechnungen anstellen möchte, will ich die einzelnen Daten als Variablen hochzählen lassen...
Am ende werden je 6Verschiedene Daten pro Datensatz von bis zu 30 Datensätzen abgefragt.

Hier mal meine (stümperhafte) idee, die nicht funktioniert, stark vereinfacht auf 2 Daten pro Satz reduziert...

PHP-Datei:

Code: Alles auswählen

		$sql = "SELECT *
			FROM " . TVP_UNIT_TABLE . '
			WHERE tvp_unit_user = ' . (int) $user_id . '
			ORDER BY tvp_unit_date DESC';
   			$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{

       		$titel_var[]	= $row['tvp_unit_titel'];
       		$date_var[]	=> $row['tvp_unit_date'];
        		
		}
		$db->sql_freeresult($result);
Jetzt würde ich gerne dies und das berechnen:
Dies sollte dann so aussehen:

Code: Alles auswählen

$titel_var[0] mache dies und jenes
          $titel_var[1] mache dies und jenes
          $titel_var[2] mache dies und jenes
          $date_var[0] mache dies und jenes
          $date_var[1] mache dies und jenes
          $date_var[2] mache dies und jenes
und am ende wirds ganz normal ans Template übergeben:

Code: Alles auswählen

			'TITEL_VAR0'	 		=> $titel_var[0],
			'TITEL_VAR1'	 		=> $titel_var[1],
			'TITEL_VAR2'	 		=> $titel_var[2],
			'DATE_VAR0'	 		=> $date_var[0],
			'DATE_VAR1'	 		=> $date_var[1],
			'DATE_VAR2'	 		=> $date_var[2],
So hatte ich mir das zumindest vorgestellt...
Versteht ihr was ich meine???
Ich wäre euch wieder einmal sehr dankbar für eure unterstützung...

Re: Schleife Datenbankabfrage

Verfasst: 12.08.2009 12:47
von oxpus
Hallo,

das geht alles in einer Abfrage direkt mit der While-Schleife:

Code: Alles auswählen

		$sql = "SELECT * FROM " . TVP_UNIT_TABLE . '
		   WHERE tvp_unit_user = ' . (int) $user_id . '
		   ORDER BY tvp_unit_date DESC';
		$result = $db->sql_query($sql);
		
		while ($row = $db->sql_fetchrow($result))
		{
			$titel_tmp = $row['tvp_unit_titel'];
			$date_tmp = $row['tvp_unit_date'];
			
			// Hier die Berechnungen/Bearbeitungen rein
			$titel_tmp = ...;
			$date_tmp = ...;
			// Berechnung/Bearbeitung ENDE
			
			$template->assign_block_vars('tvp_row', array(
				'TITEL_VAR' => $titel_tmp,
				'DATE_VAR'	=> $date_tmp,
			));
		}
		$db->sql_freeresult($result);
Und im Template hast du dann diesen Block für die Darstellung zur Verfügung (mal ohne HTML-Tags):

Code: Alles auswählen

<!-- BEGIN tvp_row -->
{tvp_row.TITEL_VAR}
{tvp_row.DATE_VAR}
<!-- END tvp_row -->

Re: Schleife Datenbankabfrage

Verfasst: 12.08.2009 23:58
von Dagtor
Hallo Oxpus,

danke für deine Antwort...

Ich bin mir jetzt nicht ganz Sicher ob Du mich ganz richtig verstanden hast...
Ich muss an die Daten ran und die bearbeiten. Da ich nicht 30 Einzelne Datenbankabfragen schreiben will, die zudem (vermutlich) eine hohe Belastung darstellen würde, möchte ich alle Daten aus den "$row"[-arrays] (Das sind doch letztlich arrays???) einzeln extrahieren. Und am ende auch Einzeln bearbeiten und Einzeln ans Template senden...

Ich habe mir deinen Vorschlag etwas umgebaut. Vielleicht veranschaulicht er noch mal etwas mehr wo ich hin will. Immerhin gibts schon mal keine weisse Seite! Allerdings werden nur die ersten drei Buchstaben der Daten aus der Variable "$titel_temp1" ausgegeben. Nach einer Überprüfung kann ich immerhin auch behaupten das wenigstens diese 3Buchstaben schon einmal korrekt wären...

Hier also mein neuer Code:

Code: Alles auswählen

      $sql = "SELECT * FROM " . TVP_UNIT_TABLE . '
         WHERE tvp_unit_user = ' . (int) $user_id . '
         ORDER BY tvp_unit_date ASC';
      $result = $db->sql_query($sql);
      
      while ($row = $db->sql_fetchrow($result))
			{
			$titel_tmp 		= $row['tvp_unit_titel'];
			
			
			
			$titel_tmp1 	= $titel_tmp[0];
			$titel_tmp2 	= $titel_tmp[1];
			$titel_tmp3 	= $titel_tmp[2];
			
			
			
         
         $template->assign_vars(array(
			'TITEL_VER1'	 		=> $titel_tmp1,
			'TITEL_VER2'	 		=> $titel_tmp2,
			'TITEL_VER3'	 		=> $titel_tmp3,
         ));
      }
      $db->sql_freeresult($result);

Ich hoffe das dies überhaupt möglich ist?! Ich bin leider kein Berufsprogramierer oder Semiprofessioneler wie ihr es seid. Deshalb bin ich auf eure Hilfe angewiesen...


Edit:

Ich habe die gerade beschriebene abfrage wie folgt geändert:

Diesen Teil:

Code: Alles auswählen

$titel_tmp 		= $row['tvp_unit_titel'];
habe ich so geändert:

Code: Alles auswählen

$titel_tmp 		= explode(',', $row['tvp_unit_titel']);
Jetzt erhalte ich immerhin schon den Kompleten Spalteninhalt....
Aber es werden immer noch nicht die folgenden 2 Daten angezeigt/verarbeitet/bereit gestellt...?!?!?:

Code: Alles auswählen

			$titel_tmp2 	= $titel_tmp[1];
			$titel_tmp3 	= $titel_tmp[2];

Re: Schleife Datenbankabfrage

Verfasst: 13.08.2009 08:53
von oxpus
Hallo,

da ich ja nun nicht weis, wie die Daten in der Tabelle gespeichert sind und wie sie bearbeitet werden sollen, hatte ich alles zusammen in eine Abfrage gepackt.
Es lassen sich ja auch mehrere Tabellen miteinander in einer Abfrage aus der Datenbank holen, sofern sie logisch miteinander verknüpft werden können.
Auch dann wäre in der von mir genannten Möglichkeit die Bearbeitung in einer Schleife möglich.

Aber wie gesagt:
Solange ich nicht genau weiss, welche Daten du woher holen willst und wie diese zu bearbeiten sind, kann man hier nur raten...