[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
verschachtelte SQL Abfrage - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Kimes
Beiträge: 13
Registriert: 15. Feb 2012, 13:48

verschachtelte SQL Abfrage

13. Mär 2012, 01:00

Hallo zusammen,

ich bastle momentan ein kleines Script um Veranstaltungen und Ihre Teilnehmer auszugeben.
Ich habe 2 Tabellen:

rex_com_veranstaltung
id|name|ort|dauer

rex_com_teilnehmen
(In dieser Tabelle wird die User Id aus rex_com_user gespeichtert und die id aus rex_com_veranstaltung)
id|user_id|event_id

Die Ausgabe für die Veranstaltungen sieht so aus:

Code: Alles auswählen

<?php

$groupid = $REX["COM_USER"]->getValue("rex_com_group");

$sql = rex_sql::factory();
$sql->setQuery('SELECT * FROM rex_com_veranstaltung');
$sql->debugsql = 3;
while($sql->hasNext())
{
  ## Hier Ausgabe
  echo $sql->getValue('name');
  echo ' - ';
  echo $sql->getValue('ort');
  echo ' - ';
  echo $sql->getValue('dauer');
  echo '  ';

      if($groupid == 3) {

        echo '<a href="'.rex_getUrl(45).'?&id='.$sql->getValue('id').'">editieren</a> - ';
        echo '<a href="'.rex_getUrl(46).'?&id='.$sql->getValue('id').'">löschen</a> - ';
       }
       if($groupid == 2 || $groupid == 3){
        echo '<a href="'.rex_getUrl(42).'?&id='.$sql->getValue('id').'">anmelden</a>';
       }

  echo '<br />';
  
  $sql->next();
}

?>
User haben die Möglichkeit sich über den link "anmelden" an einer Veranstaltung teilzunehmen (funktioniert soweit), aber wie kann ich jetzt innerhalb dieser Abfrage alle User ausgeben, die sich für die zugehörige Veranstaltung angemeldet haben?

Ich habe bereits eine verschachtelte Abfrage versucht sowie über JOIN aber ich komm einfach nicht zum gewünschten Ergebnis, ich bräuchte ein Beispiel oder ein Denkanstoss.

Vielen Dank im voraus.

Kimes

Kimes
Beiträge: 13
Registriert: 15. Feb 2012, 13:48

Re: verschachtelte SQL Abfrage

13. Mär 2012, 05:49

Habs bereits hinbekommen.
so sieht das ganze jetzt aus

Code: Alles auswählen

<?php

$groupid = $REX["COM_USER"]->getValue("rex_com_group");
$activeid = $REX["COM_USER"]->getValue("id");

$sql = rex_sql::factory();
$sql->setQuery('SELECT * FROM rex_com_veranstaltung');

while($sql->hasNext()){

  ## Hier Ausgabe
  echo $sql->getValue('name');
  echo ' - ';
  echo $sql->getValue('ort');
  echo ' - ';
  echo $sql->getValue('dauer');
  echo ' - ';
 
      if($groupid == 3) {

        echo '<a href="'.rex_getUrl(45).'?&id='.$sql->getValue('id').'">editieren</a> - ';
        echo '<a href="'.rex_getUrl(46).'?&id='.$sql->getValue('id').'">löschen</a> - ';
       }
      
         if($groupid == 2 || $groupid == 3 ){
          echo '<a href="'.rex_getUrl(42).'?&id='.$sql->getValue('id').'">anmelden</a>';
       }
       
  echo '<br />';
  
  $sql_2 = rex_sql::factory();
  $sql_2->setQuery('SELECT 
						rex_com_user.firstname,
						rex_com_user.name,
						rex_com_teilnehmen.id,
						rex_com_teilnehmen.user_id		
           FROM 
            rex_com_teilnehmen,
            rex_com_user
           WHERE
            rex_com_teilnehmen.event_id = '.$sql->getValue('id').'
           AND
            rex_com_teilnehmen.user_id = rex_com_user.id');
 
 
  while($sql_2->hasNext())
  {
    echo 'MA: '.$sql_2->getValue('name');
    
    if($activeid == $sql_2->getValue('user_id')){
      echo ' ';
      echo '<a href="'.rex_getUrl(44).'?&id='.$sql_2->getValue('id').'">abmelden</a>';
    }
    
    echo '<br />';
    
  $sql_2->next();
  }
  
  $sql->next();
}

?>

Kann man es noch besser/einfacher machen?

bzw. hier wird der "anmelden" link immer gezeigt, auch wenn user bereits angemeldet sind..
d.h. user können sich auch mehrmals anmelden, wie kann ich das am besten umgehen?

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: verschachtelte SQL Abfrage

20. Mär 2012, 18:11

Hej,
Kimes hat geschrieben:bzw. hier wird der "anmelden" link immer gezeigt, auch wenn user bereits angemeldet sind..
d.h. user können sich auch mehrmals anmelden, wie kann ich das am besten umgehen?
Abfragen ob der User in der Tabelle rex_com_teilnehmen bei der jeweiligen Id schon vorhanden ist.

Ist er nicht -> anmelden Link
Ist er -> kein Link

vg Thomas

Benutzeravatar
Markus.Lorch
Beiträge: 682
Registriert: 21. Okt 2007, 17:22
Wohnort: Walheim

Re: verschachtelte SQL Abfrage

26. Mär 2012, 23:35

Code: Alles auswählen

$groupid = $REX["COM_USER"]->getValue("rex_com_group");
Bitte beachten, dass das nur funktioniert wenn ein User ausschließlich in einer einzigen Gruppe ist. Sobald ein User in mehr als einer Gruppe ist, kracht es im verlauf deines Scripts.

Code: Alles auswählen

$groups = explode(',',$REX["COM_USER"]->getValue("rex_com_group"));
$groups wäre dann ein Array mit den Gruppen IDs
Grüße,
Markus Lorch

Tschüssle sagt Herr Nüssle

Zurück zu „Sonstiges“