Fragen zu SELECT, PHP, MYSQL

Benutzeravatar
hank
Beiträge: 617
Registriert: 31.12.2004 23:47:41
Wohnort: Rüdesheim am Rhein

#1 Fragen zu SELECT, PHP, MYSQL

Beitrag von hank »

Hi,
ich bin mal wieder ein wenig an meiner Homepage am Basteln und baue da nun ein Terminkalender ein. Das klappt auch alles. Eintragen, freischalten usw.

Nun möchte ich aber noch zusätzlich ein paar Sachen einbauen, zb. nur die Einträge eines bestimmten Monats anzeigen.

Mein Problem ist die SELECT Abfrage - das Datum ist in der DB als tt.mm.yyyy hinterlegt - ich mochte aber nur den Monat vergleichen.

also so in der art :

SELECT * FROM termine WHERE beginn(und hier irgendwie nur den Monat) ='$mon' ORDER BY id ASC

Hat einer ne Idee?
Gruß - Jan
Benutzeravatar
TommyB
Beiträge: 1268
Registriert: 20.07.2005 14:43:53
Wohnort: 72336 Balingen
Kontaktdaten:

#2

Beitrag von TommyB »

hilft das hier weiter?:

Query nach Monat
Grüsse
Thomas

Setup: T-Rex 600 CF, Strecker 330.30, Jazz 80-6-18, 3 x S9252,
Gy401 + S9254, Helitron Lipo Controller, SLS XTRON 4400mAh 6S1P, Futaba T8FG
Status: Schweben/Rundflug/Looping/Rolle/Flip
Benutzeravatar
tracer
Operator
Operator
Beiträge: 63851
Registriert: 18.08.2004 18:50:03
Wohnort: Kollmar
Has thanked: 5 times
Been thanked: 4 times
Kontaktdaten:

#3 Re: Fragen zu SELECT, PHP, MYSQL

Beitrag von tracer »

hank hat geschrieben: Mein Problem ist die SELECT Abfrage - das Datum ist in der DB als tt.mm.yyyy hinterlegt - ich mochte aber nur den Monat vergleichen.

also so in der art :

SELECT * FROM termine WHERE beginn(und hier irgendwie nur den Monat) ='$mon' ORDER BY id ASC

Hat einer ne Idee?
Klar :)

SELECT *
FROM termine
WHERE beginn LIKE '%-$mon-%
ORDER BY id ASC
Benutzeravatar
hank
Beiträge: 617
Registriert: 31.12.2004 23:47:41
Wohnort: Rüdesheim am Rhein

#4

Beitrag von hank »

Guten Morgen,

vielen Dank - so gings: SELECT * FROM termine WHERE beginn LIKE '%.$mon.%' ORDER BY id ASC
Gruß - Jan
Benutzeravatar
tracer
Operator
Operator
Beiträge: 63851
Registriert: 18.08.2004 18:50:03
Wohnort: Kollmar
Has thanked: 5 times
Been thanked: 4 times
Kontaktdaten:

#5

Beitrag von tracer »

hank hat geschrieben:Guten Morgen,

vielen Dank - so gings: SELECT * FROM termine WHERE beginn LIKE '%.$mon.%' ORDER BY id ASC
Oh, habe die Punkte übersehen.

Entweder verwendest Du keinen DATETIME, oder Dein Server ist falsch konfiguriert.
Ein ISO Datum sieht so aus:
"YYY-MM-DD HH:MM:SS"
Benutzeravatar
Richard
Beiträge: 5904
Registriert: 30.10.2004 09:28:12
Wohnort: Erde
Kontaktdaten:

#6

Beitrag von Richard »

Anhäng...

Naja wär interessant wie ich einen User in Mysql das recht von Reload vergebe, die Option gibts nicht sichtbar ... :) ?

Oder wie vergebe ich richtige die rechte ??.. gibts wo ein deutsch tut ?..



Gruß
Richard
derzeit: Sim

______________________________________________________

My Home http://www.reverbnation.com/bbmmp


"Aufgeben gibts nicht..." :richard: ".....oft findet man den Sieg in der Niederlage......
Benutzeravatar
tracer
Operator
Operator
Beiträge: 63851
Registriert: 18.08.2004 18:50:03
Wohnort: Kollmar
Has thanked: 5 times
Been thanked: 4 times
Kontaktdaten:

#7

Beitrag von tracer »

Richard hat geschrieben: Naja wär interessant wie ich einen User in Mysql das recht von Reload vergebe, die Option gibts nicht sichtbar ... :) ?
Es gibt ein Feld "reload_priv"
Benutzeravatar
hank
Beiträge: 617
Registriert: 31.12.2004 23:47:41
Wohnort: Rüdesheim am Rhein

#8

Beitrag von hank »

tracer hat geschrieben:
hank hat geschrieben:Guten Morgen,

vielen Dank - so gings: SELECT * FROM termine WHERE beginn LIKE '%.$mon.%' ORDER BY id ASC
Oh, habe die Punkte übersehen.

Entweder verwendest Du keinen DATETIME, oder Dein Server ist falsch konfiguriert.
Ein ISO Datum sieht so aus:
"YYY-MM-DD HH:MM:SS"
Ja - ist mir schon klar. Dieses Datum ist ein Datum, das der User über Form selbst eingibt. Da kann ich ja wohl schlecht erklären, man muss das Datum so reinschreiben - ok - ich könnte es umwandeln - aber so geht es jetzt ja auch :lol:
Gruß - Jan
Benutzeravatar
tracer
Operator
Operator
Beiträge: 63851
Registriert: 18.08.2004 18:50:03
Wohnort: Kollmar
Has thanked: 5 times
Been thanked: 4 times
Kontaktdaten:

#9

Beitrag von tracer »

hank hat geschrieben: Ja - ist mir schon klar. Dieses Datum ist ein Datum, das der User über Form selbst eingibt. Da kann ich ja wohl schlecht erklären, man muss das Datum so reinschreiben - ok - ich könnte es umwandeln - aber so geht es jetzt ja auch :lol:
Ich würde das nochmal überdenken.
MySQl biete eine Menge an mächtigen Funktionen zur Manipulation von Datumswerten.
Wenn Du den Datentyp nicht nutzt, verlierst Du die Möglichkeit, die MySQl Funktionen zu nutzen.
Das ist ungefähr wie Gas auf einem Schieberegler, es geht, aber ... :)

Einfach 2 kleine Funktionen in Script rein, und schon kann der User mit seinem "Bekannten" Format arbeiten, und MySQl mit dem nativen.

Code: Alles auswählen

function iso2ger($date)
{
        return (substr($date, 8, 2) . "." . substr($date, 5, 2) . "." . substr($date, 0, 4) . " " . substr($date, 11, 5));
}

function ger2iso($date)
{
        return (substr($date, 6, 4) . "-" . substr($date, 3, 2) . "-" . substr($date, 0, 2));
}
Das ist für DATE, analog geht das natürlich auch für DATETIME.
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#10

Beitrag von speedy »

Wenn Du den Datentyp nicht nutzt, verlierst Du die Möglichkeit, die MySQl Funktionen zu nutzen.
Hmm, naja - ich nutze auch nicht jenen Datentyp. Ich speichere als int die Sekunden ab 1970 und gut. Hat mir bisher auch viel Arbeit erspart. z.B. bei nem Timeout einfach aktuelle Zeit (bzw. aktuelle Sekunden ab 1970) minus x Sekunden und der Rest ist im Timeout bzw. wird gelöscht etc. etc.


MFG,
speedy
Holger Port

#11

Beitrag von Holger Port »

Gibt es in mySQL evtl. auch DATEPART wie z.B. beim SQL-Server?

SELECT * FROM MeinerTabelle WHERE DATEPART(mm, MeinDatum) = MeinGewählterMonat
Benutzeravatar
tracer
Operator
Operator
Beiträge: 63851
Registriert: 18.08.2004 18:50:03
Wohnort: Kollmar
Has thanked: 5 times
Been thanked: 4 times
Kontaktdaten:

#12

Beitrag von tracer »

speedy hat geschrieben: Hmm, naja - ich nutze auch nicht jenen Datentyp. Ich speichere als int die Sekunden ab 1970 und gut. Hat mir bisher auch viel Arbeit erspart. z.B. bei nem Timeout einfach aktuelle Zeit (bzw. aktuelle Sekunden ab 1970) minus x Sekunden und der Rest ist im Timeout bzw. wird gelöscht etc. etc.
Ich habe ein paar Standardfunktionen, die mir in Verbindung mit mktime() genau das ermöglichen.
Benutzeravatar
tracer
Operator
Operator
Beiträge: 63851
Registriert: 18.08.2004 18:50:03
Wohnort: Kollmar
Has thanked: 5 times
Been thanked: 4 times
Kontaktdaten:

#13

Beitrag von tracer »

Holger Port hat geschrieben:Gibt es in mySQL evtl. auch DATEPART wie z.B. beim SQL-Server?
Welcher? M$-SQL Server?
SELECT * FROM MeinerTabelle WHERE DATEPART(mm, MeinDatum) = MeinGewählterMonat
SELECT * FROM MeinerTabelle WHERE MONTH(MeinDatum) = MeinGewählterMonat

Ist aber leider genausowenig portabel wir DATEPART (und leider auch ein Großteil der Datumsfunktionen).
Die Lösung mit LIKE ist portabel.

Ich habe mir, als ich in einem heterogenen Umfeld gearbeitet habe, eine Abstraktionsklasse geschrieben, die für M$-SQL, Oracle und MySQL die benötigten Funktionen bereitstellte, so dass das Programm auf jeder DB Lauffähig war, weil zum Beginn des Projektes noch nicht sicher war, was die Zielplatform sein wird.
(Es war damals noch nicht so einfach OpenSource zu verwenden, Oracle war vorhanden, und der IT-Leiter war M$ Fan.)
Benutzeravatar
hank
Beiträge: 617
Registriert: 31.12.2004 23:47:41
Wohnort: Rüdesheim am Rhein

#14

Beitrag von hank »

tracer hat geschrieben:
hank hat geschrieben: Ja - ist mir schon klar. Dieses Datum ist ein Datum, das der User über Form selbst eingibt. Da kann ich ja wohl schlecht erklären, man muss das Datum so reinschreiben - ok - ich könnte es umwandeln - aber so geht es jetzt ja auch :lol:
Ich würde das nochmal überdenken.
MySQl biete eine Menge an mächtigen Funktionen zur Manipulation von Datumswerten.
Wenn Du den Datentyp nicht nutzt, verlierst Du die Möglichkeit, die MySQl Funktionen zu nutzen.
Das ist ungefähr wie Gas auf einem Schieberegler, es geht, aber ... :)

Einfach 2 kleine Funktionen in Script rein, und schon kann der User mit seinem "Bekannten" Format arbeiten, und MySQl mit dem nativen.

Code: Alles auswählen

function iso2ger($date)
{
        return (substr($date, 8, 2) . "." . substr($date, 5, 2) . "." . substr($date, 0, 4) . " " . substr($date, 11, 5));
}

function ger2iso($date)
{
        return (substr($date, 6, 4) . "-" . substr($date, 3, 2) . "-" . substr($date, 0, 2));
}
Das ist für DATE, analog geht das natürlich auch für DATETIME.
ok - werde nochmal drüber nachdenken.
Obwohl es in diesem Fall tatsächlich so ist, das ich die mysql Funktionen in diesem Feld nicht benötige.

Aber versuchen kann ichs ja mal.... :roll:
Gruß - Jan
Holger Port

#15

Beitrag von Holger Port »

tracer hat geschrieben: Die Lösung mit LIKE ist portabel.
LIKE geht schon ist aber mit das langsamste was es gibt. Bei kleinen Datenmengen kein Problem nur wenn es mehr wird....

Oft geht es aber nur mit LIKE und man muß halt damit leben.
Antworten

Zurück zu „Klönschnack“