|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
rottma Smarty n00b
Joined: 09 Jul 2013 Posts: 1
|
Posted: Tue Jul 09, 2013 8:30 am Post subject: Informationen aus verschiednenen Tabellen kombinieren |
|
|
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 |
|
Fahrstuhllicht Smarty Rookie
Joined: 10 Jun 2013 Posts: 15 Location: Berlin
|
Posted: Tue Jul 09, 2013 4:57 pm Post subject: |
|
|
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 |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Wed Jul 10, 2013 6:23 am Post subject: |
|
|
@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? |
|
Back to top |
|
Fahrstuhllicht Smarty Rookie
Joined: 10 Jun 2013 Posts: 15 Location: Berlin
|
Posted: Wed Jul 10, 2013 3:37 pm Post subject: |
|
|
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.
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 |
|
|
|
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
|