CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
07.08.2003, 10:17:01
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 7
|
|
Knifflige SELECT Abfrage
Hallo,
ich habe Probleme mit einer SELECT Abfrage, stundenlang probiert - ich finde keine passende Lösung.
Meine Abfrage lautet
SELECT * FROM $dbtable (alle Spalten sollen zu sehen sein)
WHERE userid='vb150' (nur die Einträge von VB150)
ORDER BY firmenname,ldatum DESC (sortiert nach 1.Kriterium: Firmenname, 2.Kriterium: die letzten TIMESTAMP Einträge nach oben)
Das funktioniert soweit wunderbar.
Ich möchte nun aber erreichen, daß von jedem Eintrag mit gleichem Firmenname nur der letzte Eintrag angezeigt wird.
Hat jemand eine Idee, wir ich das in den Griff kriegen kann?
Sonnige Grüße,
Stefan
|
07.08.2003, 10:59:48
|
Member
|
|
Registriert seit: Aug 2002
Beiträge: 775
|
|
select distinct(firmenname) from table ....
|
07.08.2003, 11:36:58
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 7
|
|
Nun,
SELECT DISTINCT firmenname FROM $dbtable WHERE userid='vb150' ORDER BY ldatum DESC
funktioniert prima - ich bekomme jeden firmenname jeweils nur 1x angezeigt. Es sollen aber alle anderen Spalten auch angezeigt werden und sobald ich solche wie hier
SELECT DISTINCT firmenname, ldatum, vb FROM $dbtable WHERE userid='vb150' ORDER BY ldatum DESC
mit aufzähle, erhalte ich als Ergebnis wieder alle Zeilen, also nicht nur die letzten Einträge von je 1x firmenname.
Danke aber für den Tipp, vielleicht kriege ich es noch gebacken ...
Stefan
|
07.08.2003, 13:15:38
|
Member
|
|
Registriert seit: Apr 2003
Ort: 49.54, 8.35 - 3./9
Beiträge: 878
|
|
Spiele doch mal hiermit ein wenig:
SELECT * FROM $dbtable ... GROUP BY firmenname
|
07.08.2003, 13:43:43
|
Junior Member
|
|
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
|
|
Hi Stefan,
eine andere Möglichkeit, den letzten Eintrag zu finden ist mit dem "MAX-CONCAT"- Trick (in Google gefunden):
[ZITAT]
SELECT name,MAX(CONCAT(date,'|',town,'|',id)) FROM pa GROUP BY name;
Because 'date' now is the first part of the value that goes into MAX(), the
highest date will be found. This is not magic, it is because the mysql date
format (yyyy-mm-dd) will sort correctly in a string context. Dates stored in
a "dd-mm-yyyy" format would not work in this case: 31th january would be
'later than' 30th december.
Splitting the output column on the "|" character should be easy using any
scripting language.
[/ZITAT]
Ich habe obiges aber nicht getestet und kann Dir da leider keine Garantie geben, daß es wirklich klappt. Es klingt aber ziemlich logisch.
HTH,
Andy
|
07.08.2003, 16:48:06
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 7
|
|
Hi Andy,
leider kriege ich es mit MAX-CONCAT auch nicht gebacken.
Aber vielen Dank für Dein googeln!
Sollte ich noch eine Lösung finden, gebe ich diese natürlich hier noch bekannt.
Grüße,
Stefan
|
08.08.2003, 13:44:45
|
Junior Member
|
|
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
|
|
Hi Stefan,
schade, daß es damit auch nicht klappt. Im schlimmsten Fall musst Du halt 2 oder gar mehrere SELELCTs durchführen, um an Dein Ergebnis zu kommen. Das ist zwar nicht schön, aber manchmal unausweichlich. Eventuell kann Dir da auch eine Temporäre Tabelle (wird hinterher wieder gelöscht) einiges an Arbeit und Zeit sparen, damit habe ich aber selber noch nie arbeiten müssen und kenne mich daher auch nicht aus.
HTH,
Andy Maurer
|
12.08.2003, 18:12:13
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 7
|
|
Hallo Andy und alle anderen.
Über ein anderes Forum bekam ich von einem Teilnehmer eine passende Lösung, die quasi so ausschaut, wie Andy das schon vorgeschlagen hat, nämlich über eine Schleife und doppelter SELECT Abfrage.
Diese Lösung möchte ich Euch natürlich nicht vorenthalten.
Danke nochmal an dieser Stelle an alle, die sich mit dem Problem auseinander gesetzt haben! Klasse!
##########
$k=0;
$mys_first=mysql_query("SELECT DISTINCT firmenname FROM vertriebsspiegel WHERE userid='vb150'");
while ($i=mysql_fetch_array($mys_first)) {
$mys_second=mysql_query("SELECT * FROM vertriebsspiegel WHERE firmenname='$i[firmenname]'");
while ($j=mysql_fetch_array($mys_second)) {
if ($j[ldatum]>$k) {
$k=$j[ldatum];
$erg_firmenname=$j[firmenname];
$erg_ort=$j[ort];
$erg_aktivitaet=$j[aktivitaet];
// ... und vieles mehr ... Am Ende bleibt der größte Wert
}
}
print "Letzte Aktivität für $erg_firmenname in $erg_ort: $erg_aktivitaet<br>"; // Ausgabe
$k=0;
}
##########
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:41:07 Uhr.
|