MySQL Abfrage | user_id, user_name, ben_profielfeld für ACP

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Pionier
Mitglied
Beiträge: 232
Registriert: 29.12.2007 19:55
Wohnort: Niebüll (S-H)
Kontaktdaten:

MySQL Abfrage | user_id, user_name, ben_profielfeld für ACP

Beitrag von Pionier »

Hallo,

ich suche eine SQL Abfrage um im ACP eine Tabelle mit folgenden Daten darzustellen:
  • user_id
  • user_name
  • pf_ingame (benutzerdefiniertes Profilfeld)
Es sollen aber nur die User einer bestimmten Gruppe (z.B Group_id = 10) ausgelesen werden.

Im Template möchte ich dann alles so darstellen:

Code: Alles auswählen

			<!-- BEGIN userrow -->
			<form method="POST" enctype="multipart/form-data">
			<!-- IF userrow.S_ROW_COUNT is even -->
			<tr class="row1">
			<!-- ELSE -->
			<tr class="row2">
			<!-- ENDIF -->
				<td width="20%" valign="middle" nowrap="nowrap"><span class="genmed">{userrow.USERNAME}</span></td>
				<td width="20%" valign="middle" nowrap="nowrap"><span class="genmed">{userrow.USERINGAME}</span></td>
				<td width="20%" valign="middle" nowrap="nowrap"><span class="genmed">{userrow.USERALLYTAG}</span></td>
				<td valign="middle" nowrap="nowrap"><span class="genmed"><input type="hidden" name="user_id" value="{userrow.USERID}" /><input class="button2" type="submit" name="edit" value="{L_ACP_USER_EDIT_USER}" /></span></td>
			</tr>
			</form>
			<!-- END userrow -->
Derzeit versuche ich es so:

Code: Alles auswählen

// Get all config data
				$allytool_config = get_allytool_config();
				$enable	=	$allytool_config['restrict_to'];
									
				// Load the user overview page
				// Get user_id from user_group
				$sql = 'SELECT * 
					FROM ' . USER_GROUP_TABLE . "
						WHERE group_id = $enable" ; 
				$result = $db->sql_query($sql);
				while ($row = $db->sql_fetchrow($result))
				{
					$current_user_id	= $row['user_id'];
				}
				$db->sql_freeresult($result);
				
				// Get user_name from user
				$sql = 'SELECT username 
					FROM ' . USERS_TABLE . " 
					WHERE user_id = $current_user_id" ;
				$result = $db->sql_query($sql);
				while ($row = $db->sql_fetchrow($result))
				{
						$user_name = $row['username'];
				}
				$db->sql_freeresult($result);
				
				// Get user_ingamename from user
				$sql = 'SELECT * 
					FROM ' . PROFILE_FIELDS_DATA_TABLE . " 
					WHERE user_id = $current_user_id" ;
				$result = $db->sql_query($sql);
				while ($row = $db->sql_fetchrow($result))
				{
					$user_ingame = $row['pf_ingame'];
				}
				$db->sql_freeresult($result);
								
				$template->assign_block_vars('userrow', array(
								'USERNAME' 			=> $user_name,
								'USERINGAME'		=> $user_ingame,
								)
							);
				
				$colspan = 5;
					
				// Generate page
				$template->assign_vars(array(
					'U_ACTION'			=> $this->u_action,
					'S_USER'			=> true,
					'COLSPAN'			=> $colspan,
					)
				);
Aber da steckt ein gewaltiger Wurm drin :-?

Leider wir mir hier immer nur der letzte User angezeigt :(
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Schau dir doch mal an wie oft

Code: Alles auswählen

$template->assign_block_vars('userrow', array( 
Von einer Schleife durchlaufen wird.
Genau 0 Mal, also sozusagen nur einmal aber eben in keinerlei Schleife :wink: Logisch das da immer nur der Letzte steht.

Du müsstest die while Schleife ausdehnen:

Code: Alles auswählen

            while ($row = $db->sql_fetchrow($result))
            {
               $current_user_id   = $row['user_id'];
            } 
Sollte da nicht aufhören, sonder bis vor

Code: Alles auswählen

            $colspan = 5; 
gehen. Dumm ist nur das du dann 2* (Anzahl der Zeilen der 1. Abfrage)+1 SQL-Abfragen hast, sind das nicht ein paar viele?

Wie wäre es die SQLs zusammen zu fassen? So das dann Das herauskommt?

Code: Alles auswählen

// Get all config data
$allytool_config    = get_allytool_config();
$enable             = $allytool_config['restrict_to'];

// Load the user overview page
// Get user_id from user_group
$sql = 'SELECT u.username, pfd.pf_ingame
    FROM ' . USER_GROUP_TABLE . ' ug,
    ' . USERS_TABLE .' u,
    ' . PROFILE_FIELDS_DATA_TABLE .' pfd,
        WHERE group_id = ' . $enable . '
        AND u.user_id = ug.user_id = pfd.user_id';

$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
    $template->assign_block_vars('userrow', array(
        'USERNAME'          => $row['username'],
        'USERINGAME'      => $row['pf_ingame'],
    ));
}
$db->sql_freeresult($result);
$colspan = 5;
// Generate page
$template->assign_vars(array(
    'U_ACTION'         => $this->u_action,
    'S_USER'         => true,
    'COLSPAN'         => $colspan,
));
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
Pionier
Mitglied
Beiträge: 232
Registriert: 29.12.2007 19:55
Wohnort: Niebüll (S-H)
Kontaktdaten:

Beitrag von Pionier »

Leider bekomme ich dann nur eine Fehlermeldung

Code: Alles auswählen

Allgemeiner Fehler
SQL ERROR [ mysql4 ]

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE group_id = 10 AND u.user_id = ug.user_id = pfd.use [1064]

SQL

SELECT u.username, pfd.pf_ingame FROM phpbb_user_group ug, phpbb_users u, phpbb_profile_fields_data pfd, WHERE group_id = 10 AND u.user_id = ug.user_id = pfd.user_id

BACKTRACE


FILE: includes/db/mysql.php
LINE: 158
CALL: dbal_mysql->sql_error()

FILE: includes/acp/acp_allytool.php
LINE: 403
CALL: dbal_mysql->sql_query()

FILE: includes/functions_module.php
LINE: 471
CALL: acp_allytool->main()

FILE: adm/index.php
LINE: 74
CALL: p_master->load_active()

**EDIT**

Habe es hinbekommen :lol:

Code: Alles auswählen

// Get user_id from user_group
$sql = 'SELECT p.user_id, ps.username, pp.pf_ingame
	FROM ' . USER_GROUP_TABLE . ' p,
	' . USERS_TABLE .' ps,
	' . PROFILE_FIELDS_DATA_TABLE .' pp
	WHERE p.group_id=' . $enable . '
	AND ps.user_id=p.user_id AND pp.user_id=p.user_id';
				
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Ok ich dachte das das mit 3 Gleichheitsbedingungen geht, naja wieder was gelernt :wink:

Gut ist auch das du selbst etwas ausprobiert hast :)
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Antworten

Zurück zu „Coding & Technik“