php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 25-09-2006, 11:16
fuzzycontrol
 Newbie
Links : Onlinestatus : fuzzycontrol ist offline
Registriert seit: Sep 2006
Beiträge: 6
fuzzycontrol ist zur Zeit noch ein unbeschriebenes Blatt
Standard [MySQL 4.0] nach zeit gruppieren

Hi,

ich habe in meiner Tabelle eine Spalte für DateTime und eine Spalte anzahl.

nun möchte ich in einer Abfrage nach der Zeit gruppieren und summieren, also etwa so

select * from counter.counter
where zeit like '2006-09-25 10:3%'
;

dieses ergebnis soll dann nach einzelnen Minuten gruppiert werden, also
eine Zeile für 10:30
eine Zeile für 10:31
Mit Zitat antworten
  #2 (permalink)  
Alt 25-09-2006, 11:50
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

GROUP BY LEFT(datumsspalte, Anzahl Stellen)
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #3 (permalink)  
Alt 25-09-2006, 13:17
fuzzycontrol
 Newbie
Links : Onlinestatus : fuzzycontrol ist offline
Registriert seit: Sep 2006
Beiträge: 6
fuzzycontrol ist zur Zeit noch ein unbeschriebenes Blatt
Standard

danke, genau das hab ich gebraucht
Mit Zitat antworten
  #4 (permalink)  
Alt 25-09-2006, 15:11
fuzzycontrol
 Newbie
Links : Onlinestatus : fuzzycontrol ist offline
Registriert seit: Sep 2006
Beiträge: 6
fuzzycontrol ist zur Zeit noch ein unbeschriebenes Blatt
Standard

left() ist leider nicht HQL-kompatibel,

aber dank deiner Hilfe bin ich auf substring() gestossen

Geändert von fuzzycontrol (25-09-2006 um 15:43 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 25-09-2006, 15:15
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich will jetzt mrhappiness ungern korrigieren, aber mein Ansätz wäre folgender:

PHP-Code:
SELECT FROM tab1 GROUP BY YEAR(zeit

EDIT:
sorry, thema verfehlt *doh*
Dennoch möchte ich anmerken das dir die Datumsfunktionen evtl auch weiter helfen können.

Mit Zitat antworten
  #6 (permalink)  
Alt 25-09-2006, 15:43
fuzzycontrol
 Newbie
Links : Onlinestatus : fuzzycontrol ist offline
Registriert seit: Sep 2006
Beiträge: 6
fuzzycontrol ist zur Zeit noch ein unbeschriebenes Blatt
Standard

auch nicht schlecht, damit kann ich dann das machen:
...
group by minute(zeit)
order by zeit

ich bin sehr an mehreren Möglichkeiten der Abfrage interessiert, da die Tabelle sehr gross ist (mehrere Mio Einträge) versuche ich die schnellste rauszufinden
Mit Zitat antworten
  #7 (permalink)  
Alt 25-09-2006, 16:48
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn du ein Order by Zeit machst, und zeit ein Feld ist was beim anlegen des Datensatzes erzeugt wird (now() ) dann sortier lieber nach deinem PrimaryKey - das ist schneller.
Mit Zitat antworten
  #8 (permalink)  
Alt 25-09-2006, 16:54
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von prego
Wenn du ein Order by Zeit machst, und zeit ein Feld ist was beim anlegen des Datensatzes erzeugt wird (now() ) dann sortier lieber nach deinem PrimaryKey - das ist schneller.
*seufz*

Seit wann bitte hat ein Primary Key, die Datensatz-ID, irgendeine Sortierungsaufgabe?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #9 (permalink)  
Alt 25-09-2006, 17:34
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hmm, ok - ich will versuchen zu verstehen warum du das sagst.

Folgendes Beispiel:
Ich hab eine Log-Tabelle. Dort werden nach Zeit nun Einträge abgelegt. Dazu gehört ein DateTime-Feld was bei jedem Insert mit now() befüllt wird.

Nun möchte ich die letzten 10 Einträge.

SELECT * FROM tab1 ORDER BY created DESC LIMIT 0,10

soweit ok - wenn ich aber in dieser Tabelle 500k Datensätze habe, ist folgendes schneller:

SELECT * FROM tab1 ORDER BY id DESC LIMIT 0,10

Die id ist fortlaufend, es gibt sie nicht doppelt und sie wächst immer an (primary key, auto increment).

Warum ist es falsch danach zu sortieren?
Mit Zitat antworten
  #10 (permalink)  
Alt 25-09-2006, 18:41
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von prego
Die id ist fortlaufend, es gibt sie nicht doppelt und sie wächst immer an (primary key, auto increment).
Das mag bei deinem Minimalbeispiel vielleicht so sein.
Zitat:
Warum ist es falsch danach zu sortieren?
Weil die ID einzig und allein die Aufgabe hat, einen Datensatz eindeutig zu identifizieren, Punkt.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #11 (permalink)  
Alt 26-09-2006, 10:23
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ok, das nehm ich jetzt erstmal so hin. Wenn du ne Quelle dazu findest wär cool.

Aber wie soll ich den nun mein Beispiel mit der selben Geschwindigkeit deiner Meinung nach lösen, wenn ich nicht "order by id" machen darf?
Mit Zitat antworten
  #12 (permalink)  
Alt 26-09-2006, 10:32
fuzzycontrol
 Newbie
Links : Onlinestatus : fuzzycontrol ist offline
Registriert seit: Sep 2006
Beiträge: 6
fuzzycontrol ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hab mal die Varianten durchgetestet

4,6 Mio Datensätze

die Variante:

- mit left() oder substring() : 5,2 sekunden

- mit group by hour(zeit) order by zeit : 4,68 sekunden

- mit group by hour(zeit) order by id : 4,70 sekunden


Das ist aber keine Statistik, da die Testreihen sehr kurz waren
aber man sieht zumindest, dass substring() länger dauert
und order by id nicht wirklich besser ist als order by zeit
Mit Zitat antworten
  #13 (permalink)  
Alt 26-09-2006, 10:36
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ich hab hier zB ne User DB. Knapp 100k Einträge, ca 20 Spalten. Ich will die 10 neusten User selecten. (InnoDB)

SELECT * FROM tab1 ORDER BY created DESC LIMIT 0 , 10: 0.5847s

SELECT * FROM tab1 ORDER BY id DESC LIMIT 0 , 10: 0.0789s

Das ist schon ein "größerer" Unterschied...
Mit Zitat antworten
  #14 (permalink)  
Alt 26-09-2006, 10:53
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von prego
Aber wie soll ich den nun mein Beispiel mit der selben Geschwindigkeit deiner Meinung nach lösen, wenn ich nicht "order by id" machen darf?
[ ] Du hast davon gehört, dass man einen Index auf Spalten setzen kann.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #15 (permalink)  
Alt 26-09-2006, 11:05
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ok, ihr hab mich.

Index auf das Feld...

SELECT * FROM tab1 ORDER BY created DESC LIMIT 0 , 10: 0.0838s


Obwohl ich richtigerweise schon mehrere Indeces in der Tabelle gesetzt habe, für andere Sachen, bin ich nicht auf die Idee gekommen meinem DateTime Feld auch noch nen Index zu verpassen... *grmpf*
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:50 Uhr.