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
> 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 |
------------------------------------------------------------------
> 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
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)
SELECT bla DIV 2 * 2 FROM foo
aber was hat Ganzahlarithmetik mit MySQL zu tun?
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.
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
>> 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
Hat jemand eine andere L�sung?
MFG Daniel
>> 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
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
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
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
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.
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
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)
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