Beiträge: 427
Themen: 45
Registriert seit: 11.08.2012
MyBB-Version: 1.8.36
20.01.2018, 18:46
(Dieser Beitrag wurde zuletzt bearbeitet: 20.01.2018, 19:00 von melancholia.)
Guten Abend,
vermutlich sehe ich den bekannten Wald vor lauter Bäume nicht mehr, aber ich komme bei einem Problem gerade nicht weiter und hoffe, mir kann hier jemand auf die Sprünge helfen.
Es geht darum, dass ich eine Tabelle habe, in der User-IDs gespeichert werden.
Abgespeckt sieht das Ganze so aus, um es zu veranschaulichen:
id uids
1 1,2,3
2 2,3
3 1,4,5
4 2,4
Nun würde ich gerne zählen, wie oft eine gewisse User-ID in allen uids-Feldern vorkommt.
Sprich, User-ID 2 dreimal, User-ID 1, 3 und 4 jeweils zweimal und User-ID 5 nur einmal.
Als nächsten Schritt soll eine Aktion ausgelöst werden, wenn eine User-ID 5x gezählt wird.
Wie mache ich das am besten? oô
Vielen Dank und liebe Grüsse!
Beiträge: 82
Themen: 11
Registriert seit: 28.01.2017
MyBB-Version: 1.8.21
Hallo,
hast Du diese Tabell in Excel oder wo ?
Schönen Gruß
Peter
Ich hab´gerade aus dem Fenster geguckt, um zu sehen, wie das Wetter ist.
AUS DEM FENSTER......OBWOHL MEIN HANDY NEBEN MIR LIEGT !!
Wie im Mittelalter
Beiträge: 427
Themen: 45
Registriert seit: 11.08.2012
MyBB-Version: 1.8.36
Es ist eine Datenbanktabelle meines Forums
Nach noch mehr herumprobieren, bin ich nun bei folgendem Query gelandet, das auch den Zweck zu erfüllen scheint:
PHP-Code:
$query = $db->query("SELECT COUNT(uids) as count FROM ".TABLE_PREFIX."table WHERE (uids LIKE ('%$uid,%') OR uids LIKE ('%,$uid%'))");
Gäbe es vielleicht noch eine andere (elegantere) Lösung?
Beiträge: 8.516
Themen: 59
Registriert seit: 20.04.2010
MyBB-Version: 1.8*
Hmm, einen explode davor machen und die uids somit auslesen. Dann das explode Resultat in die Where mit rein.
Mit freundlichen Grüßen
MrBrechreiz
Beiträge: 2.041
Themen: 10
Registriert seit: 28.06.2007
MyBB-Version: 1.8.x
(21.01.2018, 01:30)melancholia schrieb: Es ist eine Datenbanktabelle meines Forums
Nach noch mehr herumprobieren, bin ich nun bei folgendem Query gelandet, das auch den Zweck zu erfüllen scheint:
PHP-Code:
$query = $db->query("SELECT COUNT(uids) as count FROM ".TABLE_PREFIX."table WHERE (uids LIKE ('%$uid,%') OR uids LIKE ('%,$uid%'))");
Gäbe es vielleicht noch eine andere (elegantere) Lösung?
Eleganter weiß man nicht, denn solche Art Listen in einem Datenbankfeld sollte man eigentlich vermeiden.
Aber deine Query wird ein falsches Ergebnis liefern, denn wenn du zB nach uid 2 suchst, wird sie auch bei uid 20 oder 222 oder 82 usw zählen.
Du könntest entweder eine einfache Abfrage durchführen und dann in einer PHP-Schleife mit explode() zählen, wie Mr. Brechreiz vorgeschlagen hat oder, wenn du das Ergebnis direkt aus der Abfrage haben möchtest, könntest du es eher in dieser Art versuchen (Für das Beispiel habe ich die ID des aktuellen Users benutzt, nach der gesucht wird):
PHP-Code:
$query = $db->query("SELECT COUNT(*) as count FROM `deine_tabelle` WHERE FIND_IN_SET('{$mybb->user['uid']}', uids)");
$number = $db->fetch_field($query, "count");
if ($number >= 5) {
// tu etwas
}
Beiträge: 427
Themen: 45
Registriert seit: 11.08.2012
MyBB-Version: 1.8.36
(21.01.2018, 15:54)doylecc schrieb: Aber deine Query wird ein falsches Ergebnis liefern, denn wenn du zB nach uid 2 suchst, wird sie auch bei uid 20 oder 222 oder 82 usw zählen.
Danke für den Hinweis, daran dachte ich natürlich nicht.
Dein Vorschlag funktioniert so, wie ich mir das vorgestellt habe.
Vielen Dank!