CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
28.05.2016, 21:37:46
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
Kleines Problem mit Schleifen / DB auslesen
Hallöchen,
ich arbeite gerade am Gruppen & Rechte System meines Panels.
Es ist relativ simpel aufgebaut, es enthält eine Aufteilung in Gruppen,
Gruppen-Rechte, die Rechte selbst und zugewiesene Nutzer-Gruppen.
Schließlich habe ich unter Gruppen-Rechte noch einen negate Wert
eingeführt, der dafür sorgt, dass dieses Recht in allen Gruppen für
den jeweiligen Nutzer entzogen wird.
Und genau an dieser Stelle hadere ich etwas mit den Schleifen...
Wohl eher ein kleines Logikproblem.
---
Tabellenstruktur (aktuelles Beispiel)
group_rights
group_id | right_id | negate
1 | 20 | 0
1 | 30 | 0
1 | 40 | 1
2 | 20 | 0
2 | 30 | 1
2 | 40 | 0
---
In meinem Beispiel ist der Nutzer gleichzeitig in Gruppe 1 & 2.
Er hat die Rechte mit der ID 20, 30 und 40, wobei doppelte
Einträge natürlich gelöscht werden.
Das Problem besteht darin zu ermitteln, dass alle Rechte auch
doppelte, die ein negate Wert haben gelöscht werden sollen.
In meinem Beispiel werden folgende Rechte gelöscht:
1 | 40
2 | 40
1 | 30
2 | 30
Die Daten werden per while Schleife in ein Array geworfen und
sollen dort direkt aussortiert werden und da ist das Problem.
---
In welcher Form kann ich folgendes erreichen?
- Lösche alle (gleichen) right_id das 1 oder mehrere ein negates hat
---
Doppelte Einträge lösche ich später mit array_unique().
Aber die erwähnte Frage ist gerade bisschen schwierig.
|
29.05.2016, 12:13:59
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Hallo und willkommen hier im Forum.
Zitat:
Zitat von FakE
[..]
- Lösche alle (gleichen) right_id das 1 oder mehrere ein negates hat
|
Kannst Du den Satz nochmal prüfen bzw. ein eine besser verständliche Form bringen?
Hier handelt es sich wohl eher um eine MySQL Fragestellung - oder?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
29.05.2016, 12:47:45
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Gern.
http://www.forum-hilfe.de/attachment.php?attachmentid=4193&d=1464486290
Dies ist eine aktuelle Darstellung der Tabelle Gruppen-Rechte.
User A ist gleichzeitig in Gruppe 1 und 2.
Im Query werden auch lediglich die Gruppen abgefragt, in der
User selbst ist. "WHERE `group_id` IN (1,2)"
Nun nochmal die verständlichere Erklärung.
Folgendes ist anhand des Screenshots zu sehen:
User A
Gruppe 1 - Recht 20 - negate 1
Gruppe 1 - Recht 40 - negate 0
Gruppe 2 - Recht 20 - negate 0
Gruppe 2 - Recht 30 - negate 0
Gruppe 2 - Recht 40 - negate 1
Alle Rechte (auch wenn sie doppelt vorhanden sind) werden dem
User A zugewiesen.
Ich möchte nun, dass alle Rechte mit negate 1 gelöscht werden,
allerdings nicht aus der Tabelle, sondern aus dem Array, dass alle
Informationen aus der Tabelle gesammelt hat.
Das an sich ist nicht weiter kompliziert.
ABER
Ich möchte auch alle Recht mit gleicher ID löschen, bei dem eben
eines ein negate 1 hat.
Das heißt im Endeffekt User A soll folgende Recht haben, die im
Array gesichert sind (die Struktur ist mir egal).
Gruppe 1 - nix (Recht 20 & 40 sind negiert durch Gruppe 1 selbst oder Gruppe 2)
Gruppe 2 - Recht 30
Mehr Rechte hat der User in diesem Beispiel nicht, da alle doppelten
Rechte entfernt werden, wenn min. 1 oder mehrere negiert sind.
|
29.05.2016, 13:02:45
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Ich entschuldige mich für meine komplizierte Ausdrucksweise.
Ein letzter vereinfachter Versuch:
http://www.forum-hilfe.de/attachment.php?attachmentid=4193&d=1464486290
Diese Tabelle wird in einem assoziativen Array gespeichert.
Zu beachten ist, dass der User nur in Gruppe 1 und 2 ist. ("WHERE `group_id` IN (1,2)")
Die Struktur:
PHP-Code:
array (size=5)
0 =>
array (size=2)
'right' => int 20
'negate' => int 0
1 =>
array (size=2)
'right' => int 30
'negate' => int 0
2 =>
array (size=2)
'right' => int 20
'negate' => int 1
3 =>
array (size=2)
'right' => int 40
'negate' => int 0
4 =>
array (size=2)
'right' => int 40
'negate' => int 1
Ich möchte nun, dass alle Einträge, die die selbe Rechte ID haben und
bei denen 1 oder mehrere negate Werte 1 sind, gelöscht werden. Also
übrig bleiben dürfte nur noch folgender Teil:
PHP-Code:
array (size=1)
0 =>
array (size=2)
'right' => int 30
'negate' => int 0
Dafür benötige ich Hilfe... :/
|
29.05.2016, 13:08:12
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Zitat:
Zitat von FakE
|
Bekomme ich nicht angezeigt, da ich in diesem Forum nicht angemeldet bin.
Wie/womit erstellt Du das Array?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
29.05.2016, 13:13:12
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Aktuell sieht die Funktion so aus:
PHP-Code:
$result = mysqli_query($this->SQLid, "SELECT * FROM `group_rights` WHERE `group_id` IN (" . $this->getGroupData('id') . ")");
if(mysqli_num_rows($result) != 0)
{
$result_rights = mysqli_query($this->SQLid, "SELECT * FROM `rights`");
while($col = mysqli_fetch_assoc($result))
{
$rights[] = array( "right" => intval($col['right_id']), "negate" => intval($col['negate']) );
}
$this->getGroupData('id') - erzeugt 1,2
|
29.05.2016, 13:38:18
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Versuche es mal hiermit ( ungetestet aus Ermangelung an Testdaten): bzw. nimm es als Anregung wie als gehen müsste:
PHP-Code:
$result = mysqli_query($this->SQLid,
"SELECT * FROM `group_rights`
WHERE `group_id` IN (" . $this->getGroupData('id') . ") AND
`group_id` NOT IN (SELECT `group_id` FROM `groups_right`
WHERE `negate` = 1)");
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
29.05.2016, 13:50:32
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Gibt leider gar nichts mehr aus.
Das Resultat ist null.
Ich habe auch den Tippfehler "groups_right" in "group_rights" gefixt und trotzdem null.
---
Wie gesagt, der User ist bsp. in 2 Gruppen.
Alle Gruppen-Rechte auch selbige IDs werden im Array zusammengetragen.
Alle Array Einträge mit selbiger Rechte ID, bei der min. eines davon ein negate 0
hat, sollen aus dem Array gelöscht werden, wenn es nicht möglich ist, dass gleich
mit SQL auszusortierungen.
|
29.05.2016, 13:56:39
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Dann nimm mal die beiden Teile von WHERE und frage sie einzeln - ohne das Haupt-SELECT - ab.
Was kommt dabei raus?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
29.05.2016, 14:02:36
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
AW: Kleines Problem mit Schleifen / DB auslesen
Ja dieser Art von Query bewirkt, dass alle Einträge, die negate 1
haben direkt aussortiert werden und nicht angezeigt werden.
Das nützt mir aber nichts, denn ich möchte ja ebenfalls alle Rechte
aussortieren, die negate 0 haben, aber die gleiche Rechte ID wie das
Recht, das negate 1 hatte.
Der Sinn dahinter ist, dass ein Nutzer bsp. in einer Hauptgruppe ist, die
viele Rechte hat und eine Subgruppe erhalten, die ein negate Recht hat,
dass dann alle Rechte mit gleicher ID, die der User von allen Gruppen hat
in der er ist, aussortiert.
Zu Verdeutlichung können wir uns auch gern mal in TeamSpeak oder Discord
unterhalten. Vielleicht kann ich es dir da verständlicher zeigen.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:36:54 Uhr.
|