Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe Ostern!

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
ID in Zellen zählen
#1
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?

Vielen Dank und liebe Grüsse!
Zitieren
#2
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 !!
Cool Wie im Mittelalter
Cool
Zitieren
#3
Es ist eine Datenbanktabelle meines Forums  Smile

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?
Zitieren
#4
Hmm, einen explode davor machen und die uids somit auslesen. Dann das explode Resultat in die Where mit rein.
Mit freundlichen Grüßen

MrBrechreiz
Zitieren
#5
(21.01.2018, 01:30)melancholia schrieb: Es ist eine Datenbanktabelle meines Forums  Smile

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

Zitieren
#6
(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!  Smile
Zitieren