MySQL Abfrage -> select jede n-te zeile

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
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

MySQL Abfrage -> select jede n-te zeile

Beitrag von mgutt »

*schwitz*

Das ist eigentlich seeehr ungewöhnlich was ich möchte, aber ihr müsste ja nicht drüber nachdenken ;)

Also ich habe ein Topic mit mehreren Seiten. Jetzt möchte ich den 1. Poster auf jeder Seite herausfinden. Das heißt von topic_id xxxx möchte ich die poster_id von post nr. 1, 11, 21, 31, 41, usw.

Am Ende möchte ich die poster_id's addieren, so dass erkennbar wird, wie oft welcher poster der 1. Poster auf einer Seite war.

Lange Rede kurzer Sinn. Soweit habe ich es probiert, bekomme aber kein Resultat hin, dass mein Problem löst:

Code: Alles auswählen

$sql = "SELECT topic_id, poster_id
	FROM phpbb_posts
	WHERE  topic_id = xxxx
	GROUP BY topic_id, poster_id HAVING MOD(topic_id,10) = 0 OR topic_id = 2-10";
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

... ich fürchte, dass dies GAR NICHT geht!

Die post_ids haben ja keine internen Topic-bezogenen Counter. Deshalb müsstest du alle Post zum gewünschten Topic holen und dann im Ergebniss-Array immer nur jede x-te Zeile "zählen"!

Wenn du das korrekt machen willst solltest du übrigens die entsprechende $board_config-variable nutzen, die dir sagt, wieviele Beiträge pro Seite stehen sollen!

Gruss,
MAnne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

mad-manne hat geschrieben:... ich fürchte, dass dies GAR NICHT geht!
Die post_ids haben ja keine internen Topic-bezogenen Counter. Deshalb müsstest du alle Post zum gewünschten Topic holen und dann im Ergebniss-Array immer nur jede x-te Zeile "zählen"!
also eine riesen abfrage und dann mit einer if schleife aussortieren. ist natürlich unschön und langsam. könnte man natürlich mit einem cron job alle 24 stunden eine gecachte file erstellen. aber schön ist das nicht.

gibt es nicht einen trick.. ich meine es fällt ja keine post_id doppelt an. im kopf hört sich das eigentlich einfach an.. nach post_id sortieren und dann jeden 10. eintrag auslesen. :cry:
mad-manne hat geschrieben: $board_config-variable
sicher wäre das sinnvoll, aber eher weniger wichtig, da die zahl der config nicht verändert werden darf, da ich sonst ein paar wütender user mehr hätte ;)
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

mgutt hat geschrieben:also eine riesen abfrage und dann mit einer if schleife aussortieren. ist natürlich unschön und langsam. könnte man natürlich mit einem cron job alle 24 stunden eine gecachte file erstellen. aber schön ist das nicht.
Naja .. du brauchst ja nur die poster_ids zu jedem Topic holen, das ist auch bei vielen Beiträgen halbwegs schlank 8)

gibt es nicht einen trick.. ich meine es fällt ja keine post_id doppelt an. im kopf hört sich das eigentlich einfach an.. nach post_id sortieren und dann jeden 10. eintrag auslesen. :cry:
Ich bin nicht der SQL-Guru und weiss nicht, ob es eine Formulierung gibt, die da bedeutet:
Gib mir von allem was auf meine Suchbedingung zutrifft immer nur jede 10te. Zeile ...

Aber evtl. wissen da andere mehr als ich?!

Gruss,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

mad-manne hat geschrieben:Naja .. du brauchst ja nur die poster_ids zu jedem Topic holen, das ist auch bei vielen Beiträgen halbwegs schlank 8)
naja im Moment sind es ca. 20.000 ergebnisse. nächsten monat kannst du fest von 35.000 ausgehen ;)
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Endlich mal wieder eine richtige Herausforderung :)

Code: Alles auswählen

mysql> select name FROM test;
+----------+
| name     |
+----------+
| Zeile 1  |
| Zeile 2  |
| Zeile 3  |
| Zeile 4  |
| Zeile 5  |
| Zeile 6  |
| Zeile 7  |
| Zeile 8  |
| Zeile 9  |
| Zeile 10 |
+----------+
10 rows in set (0.00 sec)

mysql> SET @row:=0;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT name FROM test HAVING (@row:=@row+1)%2=0;
+----------+
| name     |
+----------+
| Zeile 2  |
| Zeile 4  |
| Zeile 6  |
| Zeile 8  |
| Zeile 10 |
+----------+
5 rows in set (0.00 sec)
Siehe auch die MySQL Doku zu User Variables
KB:knigge
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Wunderbar! Vielen Dank!

So ihr dürft das verrückte Ergebnis dann auch bestaunen ;)

http://www.maxrev.de/bigbaby.php

Ist schon ein richtiger Sport geworden :D
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Ok, ich benötige nun folgende AddOns:

1. Limit auf max. 100 User in der Tabelle (eine Limitanweisung im mysql bringt das Problem mit sich, dass der dann bei dem Limit aufhört die n-ten Zeilen zu zählen, anstatt die User)

2. Möchte ich es irgendwie verwirklichen, dass bei Erreichen von Seitenzahlen X Bonuspunkte erzielt werden können. Also die Planung bisher: Seite 1000, 2000, 3000, 4000 etc. 10 Punkte, anstatt nur einen. Dazu fällt mir im Moment noch gar nichts ein

3. Das ist wohl das schwierigste: Ich möchte, wenn ein User von einem anderen überholt wird, dass der "Überholte" eine Email erhält in der drin steht "Hallo, User XYZ hat Dich überholt, Du bis nun auf dem X. Platz in der Topliste unter: ...."

Vielleicht hat jemand gerade zu Punkt 2 einen Tipp für mich.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

Zurück zu „Coding & Technik“