Smarty Forum Index Smarty
The discussions here are for Smarty, a template engine for the PHP programming language.
Informationen aus verschiednenen Tabellen kombinieren

 
Post new topic   Reply to topic    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
rottma
Smarty n00b


Joined: 09 Jul 2013
Posts: 1

PostPosted: Tue Jul 09, 2013 8:30 am    Post subject: Informationen aus verschiednenen Tabellen kombinieren Reply with quote

Hallo,

ich stehe gerade bei einem Smarty-Projekt auf dem Schlauch.
Ich will in eine Liste mit Bewertungen samt dem Usernamen des Bewertungsgebers und sein Profilbild ausgeben.

Die Informationen hierzu sind leider kompliziert über verschiedene Tabellen verteil:

Tabelle 1 "Bewertung"
id | stammdaten_id | bewerter_stammdaten_id | Bewertung | etc.

Tabelle 2 "Stammdaten"
id | etc.

Tabelle 3 "Userdaten"
id | stammdaten_id | username | etc.

Tabelle 4 "Userbilder"
id | bild_id | user_id

In der Tabelle Bewertungen steht z.B.
id = 1 | stammdaten_id = 111 | bewerter_stammdaten_id = 999 | bewertung_text = Toller User | etc.


Die Bewertungen für User XYZ mit stamm_id = XYZ auszugeben funktioniert:

Code:

include("Bewertungen.php");
$c_bewertung = new Criteria();
$c_bewertung->add(StammdatenPeer::STAMMDATEN_ID, $stamm_id);
$c_bewertung->addDescendingOrderByColumn(EfBewertungenPeer::ID);
$bewertung_list_result = EfBewertungenPeer::doSelect($c_bewertungen);
$bewertung_list = array();

foreach($bewertung_list_result as $bewertung_result) {
  $ap_list[$bewertung_result->getId()] = array(
  "id" => $bewertung_result->getId(),
  "stammdaten_id"=> $bewertung_result->getStammId(),
  "bewerter_stammdaten_id"=> $bewertung_result->getBewerterStammId(),
  "bewertung_text" => $bewertung_result->getBewertungText();
}


Damit werten alle Werte der Tabelle "Bewertungen" für den User mit der stammdaten_id "xyz" ausgegeben:
1, 111, 999, Toller User

Nun will ich, dass statt der bewerter_stammdaten_id (999) der dazugehörige Username und das Userbild ausgegeben wird.
Umgangssprachlich also ...

Code:

foreach($bewertung_list_result as $bewertung_result) {
SUCHE in der Tabelle USER nach der STAMMDATEN_ID "999" und gib den USERNAME aus.
UND
SUCHE in der Tabelle USER nach der STAMMDATEN_ID "999" und gib anhand der ID das dazugehörige Bild aus der Telle USERBILDER aus.
}


Wie muss ich diese beiden Abfragen insgesamt schreiben damit am Ende in der Ausgabetabelle folgendes steht:
1, 111, maxmuster, [Foto: maxmuster], Toller User

Freue mich über jegliche Hilfe.
Danke und Grüße.
Back to top
View user's profile Send private message
Fahrstuhllicht
Smarty Rookie


Joined: 10 Jun 2013
Posts: 15
Location: Berlin

PostPosted: Tue Jul 09, 2013 4:57 pm    Post subject: Reply with quote

Die SQL-Anfrage würde ich nicht in eine Foreachschleife packen. Lager das aus und führe das Result in die Schleife, aber was hat das mit smarty zu tun?

foreach($result as $key){
$smarty-assign('name', $key['username']);
$smarty-assign('pic', $key['picpfad']);
}

im Template:

{$name}
{$pic}

ungeprüft

Ich würde aber das Result per assign an das TPL geben und dort eine Foreach- Schleife aufbauen.
Back to top
View user's profile Send private message Send e-mail
Grizzly
Smarty Pro


Joined: 15 Apr 2011
Posts: 107
Location: Germany

PostPosted: Wed Jul 10, 2013 6:23 am    Post subject: Reply with quote

@Fahrstuhllicht: 1. wird es nicht funktionieren, weil du bei assign das Größerzeichen vergessen hast xD und 2. überschreibst du den Wert ja immer in der Schleife...

@rottma: Du schreibst ja im Prinzip schon das was du brauchst:

Quote:

SUCHE in der Tabelle USER nach der STAMMDATEN_ID "999" und gib den USERNAME aus.
UND
SUCHE in der Tabelle USER nach der STAMMDATEN_ID "999" und gib anhand der ID das dazugehörige Bild aus der Telle USERBILDER aus.


Demnach muss deine SQL Abfrage so aussehen (Auf StammdatenID = 999):

Code:

SELECT Userdaten.username, Userbilder.bild_id, Bewertung.* FROM Userdaten, Userbilder, Bewertung WHERE Userdaten.stammdaten_id = 999 AND Userdaten.stammdaten_id = Userbilder.user_id AND Userdaten.stammdaten_id = Bewertung.bewerter_stammdaten_id


Warum genau willst du das in einer Schleife machen?
_________________
BASE4U - Deine Meinung ist Wichtig!
Back to top
View user's profile Send private message Visit poster's website
Fahrstuhllicht
Smarty Rookie


Joined: 10 Jun 2013
Posts: 15
Location: Berlin

PostPosted: Wed Jul 10, 2013 3:37 pm    Post subject: Reply with quote

Grizzly wrote:
@Fahrstuhllicht: 1. wird es nicht funktionieren, weil du bei assign das Größerzeichen vergessen hast xD und 2. überschreibst du den Wert ja immer in der Schleife...

@rottma: Du schreibst ja im Prinzip schon das was du brauchst:

Quote:

SUCHE in der Tabelle USER nach der STAMMDATEN_ID "999" und gib den USERNAME aus.
UND
SUCHE in der Tabelle USER nach der STAMMDATEN_ID "999" und gib anhand der ID das dazugehörige Bild aus der Telle USERBILDER aus.


Demnach muss deine SQL Abfrage so aussehen (Auf StammdatenID = 999):

Code:

SELECT Userdaten.username, Userbilder.bild_id, Bewertung.* FROM Userdaten, Userbilder, Bewertung WHERE Userdaten.stammdaten_id = 999 AND Userdaten.stammdaten_id = Userbilder.user_id AND Userdaten.stammdaten_id = Bewertung.bewerter_stammdaten_id


Warum genau willst du das in einer Schleife machen?


Mist hast recht.Very Happy
Na ich bin aus dem Grund der Anfrage nicht schlau geworden. Grundsätzlich gibste das Result ans tpl weiter und setzt in die tpl die foreachschleife in smartysprache ein.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    Smarty Forum Index -> Language: German All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP