Seite 1 von 1

User per SQL Gruppen zuteilen

Verfasst: 04.06.2010 16:37
von Topper Harley
Ich möchte gerne eine Massen PN an alle registrierten User versenden. Da dies aber über 8.500 sind, kommt es beim Versand an die Gruppe "Registrierte User" immer zu Problemen.
Deshalb möchte ich gerne 1000er Gruppen anlegen, damit die PN in kleineren Happen verschickt werden kann.
D.h. in Gruppe 1 kommen die User mit den IDs 1-1000, in Gruppe 2 die User 1001-2000 etc.

Wie würde der SQL Befehl dazu lauten?

Bin für jede Hilfe dankbar! :P

Re: User per SQL Gruppen zuteilen

Verfasst: 04.06.2010 17:40
von gn#36
Was für ein Fehler tritt denn auf? Gibt's eine Fehlermeldung? Grundsätzlich sollte die PN Funktion auch an große Gruppen versenden können, alles andere wäre in meinen Augen ein Fall für den Bug Tracker auf phpBB.com.

Ich würde das ansonsten mit einem Skript erledigen, nicht mit einem reinen SQL Befehl, denn das Aufteilen in mehrere Gruppen wäre da nicht so ganz so einfach. Zumal es dafür auch eine schöne, vorgefertigte Funktion gibt: group_user_add.


Das ginge dann grob irgendwie so (ungetestet, also nicht direkt auf das Forum loslassen sondern erst am Backup testen!):

1. So viele Gruppen anlegen wie benötigt und niedrigste Group ID merken und im folgenden Skript eintragen:

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = 'php';
$group_id = {id hier rein und dann die {} weg};
include("{$phpbb_root_path}common.$phpEx");
include("{$phpbb_root_path}includes/functions_user.$phpEx");

$sql = "SELECT user_id FROM " . USERS_TABLE . " WHERE user_type IN (0,3) ";
$result = $db->sql_query($sql);
$count = 0;
$group_array = array();
while($row = $db->fetchrow($result))
{
if($count <= 1000)
{
$group_array[] = $row['user_id'];
$count++;
}
else
{
group_user_add($group_id, $group_array);
$group_array = array();
$count = 1;
$group_array[] = $row['user_id'];
$group_id++;
}
}
//Falls noch wer übrig ist:
if($group_array)
{
$group_user_add($group_id, $group_array);
}
trigger_error('Fertig!');
 
2. Das Skript ausführen.

Das ganze kann nur klappen, wenn du alle Gruppen direkt hintereinander anlegst, so dass die Gruppen IDs aufsteigend sind (also z.B. die erste Gruppe die ID 20, die zweite dann 21 usw. hat). Es wird nicht geprüft ob es die Gruppe gibt, das könnte zu seltsamen Ergebnissen führen wenn du nicht genügend Gruppen angelegt hast. Wie gesagt vorher am Backup testen.

Re: User per SQL Gruppen zuteilen

Verfasst: 05.06.2010 01:32
von Topper Harley
Fehlermeldung lautet auf zu wenig Arbeitsspeicher. Hab 40 MB, mehr gibts nicht da 1und1 (bitte nicht hauen) webspace Paket.
Den code schnipsel also so in eine leere Datei, dann als .php speichern und im rootverzeichnis des forums aufrufen?

Re: User per SQL Gruppen zuteilen

Verfasst: 05.06.2010 11:53
von gn#36
Nein. erst ein Backup machen, genügend Gruppen anlegen und dann das skript mit angepasster id in eine Datei und ausführen. wenn die Gruppen noch kleiner werden müssen, dann pass' die 1000 entsprechend an.