Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Nur gerade Ergebnisse mit MySQL abfragen

1,089 views
Skip to first unread message

Daniel Schmidt

unread,
Aug 6, 2009, 7:40:16 PM8/6/09
to
Hallo,

ich m�chte nur gerade Ergebnisse mit MySQL abfragen. Also z.B. 2, 4, 6,
8, 10 Rows. Bei ungeraden Ergebnissen sollen dann nur die Geraden, also
eins weniger angezeigt werden. Ist soetwas mit MySQL m�glich?

Gr��e Daniel

Niels Braczek

unread,
Aug 6, 2009, 9:55:52 PM8/6/09
to
Daniel Schmidt schrieb:

> ich möchte nur gerade Ergebnisse mit MySQL abfragen. Also z.B. 2, 4, 6,

> 8, 10 Rows. Bei ungeraden Ergebnissen sollen dann nur die Geraden, also

> eins weniger angezeigt werden. Ist soetwas mit MySQL möglich?

Ja.

MfG
Niels

PS: Für eine ausführlichere Antwort bedarf es mehr/genauere Informationen.

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · e-Commerce · Joomla! Content Management |
------------------------------------------------------------------

Claus Reibenstein

unread,
Aug 7, 2009, 2:00:34 AM8/7/09
to
Daniel Schmidt schrieb:

> ich m�chte nur gerade Ergebnisse mit MySQL abfragen. Also z.B. 2, 4, 6,
> 8, 10 Rows. Bei ungeraden Ergebnissen sollen dann nur die Geraden, also
> eins weniger angezeigt werden.

Ja, was denn nun? Willst Du nur gerade Ergebnisse abfragen, oder willst
Du alle Ergebnisse haben und auf gerade Werte abrunden?

Willst Du nur gerade Ergebnisse abfragen, musst Du filtern:

... WHERE ergebnis % 2 = 0;

Willst Du alle Ergebnisse haben und abrunden, musst Du rechnen:

SELECT ergebnis / 2 * 2 AS gerades_ergebnis ...

Dies klappt aber nur, wenn "ergebnis" ein ganzzahliger Datentyp ist.
Ansonsten musst Du auch noch casten:

SELECT CAST(ergebnis AS INT) / 2 * 2 ...

Gru�. Claus

Stefan Froehlich

unread,
Aug 7, 2009, 3:18:38 AM8/7/09
to
On Fri, 07 Aug 2009 08:00:34 +0200 Claus Reibenstein wrote:
> > ich möchte nur gerade Ergebnisse mit MySQL abfragen. Also z.B. 2, 4,

> > 6, 8, 10 Rows. Bei ungeraden Ergebnissen sollen dann nur die
^^^^

> > Geraden, also eins weniger angezeigt werden.
>
> Ja, was denn nun? Willst Du nur gerade Ergebnisse abfragen, oder
> willst Du alle Ergebnisse haben und auf gerade Werte abrunden?

Es liest sich so, als wolle er eine gerade _Anzahl_ an Ergebnissen
haben - weshalb auch immer.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Der Stein der Weisen, oder warum Stefan so meisterhaft verliebt!
(Sloganizer)

Christian Kirsch

unread,
Aug 7, 2009, 5:59:36 AM8/7/09
to
Daniel Schmidt schrieb:
> Hallo,
>
> ich mᅵchte nur gerade Ergebnisse mit MySQL abfragen. Also z.B. 2, 4, 6,
> 8, 10 Rows. Bei ungeraden Ergebnissen sollen dann nur die Geraden, also
> eins weniger angezeigt werden. Ist soetwas mit MySQL mᅵglich?

SELECT bla DIV 2 * 2 FROM foo

aber was hat Ganzahlarithmetik mit MySQL zu tun?

Harald Stowasser

unread,
Aug 7, 2009, 9:35:29 AM8/7/09
to
Daniel Schmidt schrieb:

Interesante Aufabe:

BEGIN;
DROP TABLE IF EXISTS pool;
CREATE TEMPORARY TABLE pool (id int)
SELECT SQL_CALC_FOUND_ROWS id FROM networks;
SELECT @unevenid:=(MAX(id) + (FOUND_ROWS()+1) % 2) FROM pool;
DELETE FROM pool WHERE id=@unevenid;
SELECT * FROM networks m,pool p WHERE p.id=n.id;
END;

So das sollte funktionieren. Vielleicht hat jemand ne bessere Idee?

Viel Spa� am Ger�t

Harald.

Daniel Schmidt

unread,
Aug 8, 2009, 9:29:11 AM8/8/09
to
> Dies klappt aber nur, wenn "ergebnis" ein ganzzahliger Datentyp ist.
> Ansonsten musst Du auch noch casten:
> SELECT CAST(ergebnis AS INT) / 2 * 2 ...

You have an error in your SQL syntax. Check the manual that corresponds
to your MySQL server version for the right syntax to use near 'INT) DIV
2 * 2 FROM tabelle WHERE [...]

Mhmm, das mit dem casten will nicht recht funktionieren. Mache ich mit
meiner Abfrage etwas falsch oder liegt es an der Version?

Meine Abfrage:
==============

SELECT feld, CAST(feld AS INT) DIV 2 * 2 FROM tabelle WHERE [...]

"feld" ist dabei ein String (longtext)

MySQL-Version: 4.0.27-standard

Gr��e Daniel

Claus Reibenstein

unread,
Aug 8, 2009, 11:13:40 AM8/8/09
to
Daniel Schmidt schrieb:

>> SELECT CAST(ergebnis AS INT) / 2 * 2 ...
>
> You have an error in your SQL syntax. Check the manual that corresponds
> to your MySQL server version for the right syntax to use near 'INT) DIV

Stimmt. INT geht an dieser Stelle nicht. Steht im Handbuch auch drin.

> MySQL-Version: 4.0.27-standard

http://dev.mysql.com/doc/refman/4.1/en/cast-functions.html

Gru�. Claus

Daniel Schmidt

unread,
Aug 8, 2009, 6:31:43 PM8/8/09
to
> Stimmt. INT geht an dieser Stelle nicht. Steht im Handbuch auch drin.

Hat jemand eine andere L�sung?

MFG Daniel

Claus Reibenstein

unread,
Aug 9, 2009, 3:52:31 AM8/9/09
to
Daniel Schmidt schrieb:

>> Stimmt. INT geht an dieser Stelle nicht. Steht im Handbuch auch drin.
>
> Hat jemand eine andere L�sung?

Sag mal, bist Du so bl�d oder tust Du nur so? Ich habe Dir doch schon
den Link genannt, wo Du Deine L�sung findest! Wie w�re es denn, wenn Du
dies zur Abwechslung auch mal LESEN w�rdest?

Gru�. Claus

Daniel Schmidt

unread,
Aug 9, 2009, 7:55:37 AM8/9/09
to
> Sag mal, bist Du so bl�d oder tust Du nur so? Ich habe Dir doch schon
> den Link genannt, wo Du Deine L�sung findest! Wie w�re es denn, wenn Du
> dies zur Abwechslung auch mal LESEN w�rdest?

ich *habe* deinen Link gelesen und die Manual so gedeutet, dass INT
nicht von CAST unterst�tzt wird. Da ich INT offensichtlich zum rechnen
brauche, interpretiere ich das so, dass dein Vorschlag nicht
funktionieren wird.

Gr��e Daniel

Claus Reibenstein

unread,
Aug 9, 2009, 11:38:15 AM8/9/09
to
Daniel Schmidt schrieb:

Du brauchst nicht INT zum Rechnen, sondern ganze Zahlen, auch INTEGER
genannt - und die findest Du auch in meinem Link.

Mit Verlaub: Dir fehlen elementare Grundlagen. Eigne sie Dir an.

Gru�. Claus

Daniel Schmidt

unread,
Aug 10, 2009, 4:44:56 PM8/10/09
to
> SELECT bla DIV 2 * 2 FROM foo
> aber was hat Ganzahlarithmetik mit MySQL zu tun?

Ich glaube meine Fragestellung war nicht korrekt. Ich habe nicht vor
MySQL als Taschenrechner zu miᅵbrauchen.

Also, vorhanden ist eine Datenbank mit 1000 Datensᅵtzen. Aus diesen
mᅵchte ich immer nur gerade Ergebnisse abfragen. Wenn ich also nach
"Fuᅵball" suche und 27 Ergebnisse in der Datenbank enthalten sind,
sollen nur 26 ausgegeben werden. Bei 101 Ergebnissen sollen nur 100
ausgegeben werden, usw.

Grᅵᅵe Daniel

Christian Kirsch

unread,
Aug 11, 2009, 2:51:08 AM8/11/09
to
Daniel Schmidt schrieb:

>> SELECT bla DIV 2 * 2 FROM foo
> > aber was hat Ganzahlarithmetik mit MySQL zu tun?
>
> Ich glaube meine Fragestellung war nicht korrekt. Ich habe nicht vor
> MySQL als Taschenrechner zu miᅵbrauchen.
>
> Also, vorhanden ist eine Datenbank mit 1000 Datensᅵtzen. Aus diesen
> mᅵchte ich immer nur gerade Ergebnisse abfragen.

Die Kardinalitᅵt der Ergebnis*menge* soll geradzahlig sein.

> Wenn ich also nach
> "Fuᅵball" suche und 27 Ergebnisse in der Datenbank enthalten sind,
> sollen nur 26 ausgegeben werden. Bei 101 Ergebnissen sollen nur 100
> ausgegeben werden, usw.

Ich kann mir schwer vorstellen, dass das mit einem SQL-Befehl geht. Und
Du sagst nicht, *welche* 26 der 27 Du gerne hᅵttest. Soll das die DB
irgendwie zufᅵllig machen? Willst Du die Daten sortieren und dann nur
die letzten 26 ausgeben? Oder ...?

*Wie* Du die grᅵᅵte geradzahlige Zahl < number_of_rows ausrechnest,
steht da ja schon.

Daniel Schmidt

unread,
Aug 12, 2009, 7:06:36 AM8/12/09
to
> *Wie* Du die grᅵᅵte geradzahlige Zahl < number_of_rows ausrechnest,
> steht da ja schon.

Kannst Du mir ein Beispiel liefern, ich blicke jetzt nicht mehr durch.
Ich kann doch ein Ergebnisnit in das WHERE Statement ᅵbernehmen!?

Grᅵᅵe Daniel

Dominik Echterbruch

unread,
Aug 12, 2009, 7:14:18 AM8/12/09
to

Wenn ich den Thread richtig interpretiere, willst du die Daten ja nicht
im Rohformat auf der MySQL-Konsole anzeigen, sondern in irgendeine
Anwendung einbetten. Warum ermittelst du nicht dort die Ergebnismenge
und zeigst einfach bei ungerader Anzahl den letzten Datensatz nicht mit
an? Das ist doch viel einfacher, als eine solche Aufgabe einem
mengenorientierten System aufzudrᅵcken.

Aus reiner Neugierde: Warum willst du eigentlich immer nur gerade
Anzahlen von Datensᅵtzen? Mir ist eine solche Problemstellung bisher
noch nicht untergekommen.

Grᅵᅵe,
Dominik
--
Wo kᅵmen wir hin, wenn alle sagten, wo kᅵmen wir hin, und niemand
ginge, um einmal zu schauen, wohin man kᅵme, wenn man ginge.
Autor: Kurt Marti (http://de.wikiquote.org/wiki/Kurt_Marti)

Axel Schwenke

unread,
Aug 12, 2009, 7:51:01 AM8/12/09
to
Daniel Schmidt <news...@ds-webtools.de> writes:
>
> Ich glaube meine Fragestellung war nicht korrekt. Ich habe nicht vor
> MySQL als Taschenrechner zu mi锟絙rauchen.
>
> Also, vorhanden ist eine Datenbank mit 1000 Datens锟絫zen. Aus diesen
> m锟絚hte ich immer nur gerade Ergebnisse abfragen. Wenn ich also nach
> "Fu锟絙all" suche und 27 Ergebnisse in der Datenbank enthalten sind,

> sollen nur 26 ausgegeben werden. Bei 101 Ergebnissen sollen nur 100
> ausgegeben werden, usw.

Das w锟絩de man wohl besser au锟絜rhalb der Datenbank machen. Z.B. in PHP

1 $con= mysql_connect(...);
2 $res= mysql_query("SELECT foo FROM bar", $con);
3 $num= mysql_num_rows($res);
4 if ($num & 1) { --$num }
5 for ($i= 0; $i<$num; ++$i) {
6 $row= mysql_fetch_assoc($res);
7 printf("foo ist '%s'\n", $row["foo"]);
8 }
9 mysql_free_result($res);

In Zeile 3 wird die Anzahl der Ergebniszeilen geholt. In Zeile 4 wird
geschaut, ob das ungerade ist und wenn ja, um eins verringert.
Zeilen 5-8 holen die gerade Anzahl von Zeilen ab. Zeile 9 verwirft den
Rest des Ergebnisses (falls da einer ist).

Fehlerbehandlung ist zu erg锟絥zen.


PS: irgendwie zickt der Newsserver von 1&1, deswegen resend


XL

0 new messages