Avatar billede allandk Nybegynder
14. januar 2003 - 21:50 Der er 31 kommentarer og
2 løsninger

?Query der skal hente et - næste - sæt data, der er udfyldt...

Jeg har en kalender, hvor jeg echo to slags information.

1. I dag...
- Her hentes alle poster med den aktuelle dags dato. Der kan sagtens være til flere

2. Næste gang...
- Her vil jeg gerne vise, hvad der sker næste gang der er noget på skemaet.

Jeg bruger denne query til den første echo:
$query = "SELECT * from kalender WHERE date='$date' order by tidspunkt";

Jeg vil ikke hvilken query jeg kan skrive for at hente næste datasæt, er der nogle gode idéer?

Bemærk; der skal ikke bare hentes data fra næste dag, da denne sagtens lan være "tom", der skal hentes fra næstkommende WHERE der er instastet en aktivitet PLUS der godt kan være flere på hinanden følgende aktiviteter med samme dato.

Jeg pinder lige ud:
14-01-2002: Natur/Teknik
14-01-2003: Sang aflyst
14-01-2003: kl. 14 - samling

15-01-2003: ingen data

16-01-2003: Natur/Teknik
16-01-2003: Gæst i klassen

Min I-dag-query henter alle 3 poster fra den 14-01-2003 og den næste - som jeg ikke kan finde ud af - skal hente hente begge poster fra 16-01-2003.

Kan man det?
Avatar billede angam Nybegynder
14. januar 2003 - 21:54 #1
Som jeg allerede har svaret i en anden tråd: hvad med:

$query = "SELECT * from kalender WHERE subject<>'' order by tidspunkt limit 1";

.. hvor subject er teksten af din event (Natur/Teknik, Gæst i klassen etc.)
Avatar billede jakoba Nybegynder
14. januar 2003 - 21:54 #2
select *
  from dintabelsnavn
  where datofelt > now()
  order by datofelt asc
  limit 0,1

så får du 'den næste'
Avatar billede jakoba Nybegynder
14. januar 2003 - 21:57 #3
Ups 'skal hente begge' siger du. Så smid
    limit 0,1
væk eller sæt tallet op til fx 4
Avatar billede angam Nybegynder
14. januar 2003 - 21:58 #4
.. men den næste kan være tom.
Du har dog fat i at datoen skal med i forespørglen også:

$query = "SELECT * from kalender WHERE date >$date and subject<>'' order by tidspunkt limit 1";
Avatar billede angam Nybegynder
14. januar 2003 - 22:01 #5
.. og den med limit 1 så jeg så heller ikke - hehe. No Limit!
Avatar billede allandk Nybegynder
14. januar 2003 - 22:04 #6
Hvis jeg laver denne:

$query = "SELECT * from kalender WHERE date >$date and comment<>'' order by tidspunkt limit 10";

så henter den ALLE comment-felter fra 01-01-2003 og frem til limit på 10
Avatar billede angam Nybegynder
14. januar 2003 - 22:08 #7
.. vel alle _udfyldte_ comment-felter?

$date skal iøvrigt i situationstegn ('$date').
Avatar billede jakoba Nybegynder
14. januar 2003 - 22:08 #8
det er så sammenligningen
    dato > $date
den er gal med.
hvordan er feltet 'date' defineret og hvad står der i variabelen $date ??
Avatar billede allandk Nybegynder
14. januar 2003 - 22:17 #9
Ja, kun alle udfyldte comment-felter
Jeg tester lige med ('')
Avatar billede allandk Nybegynder
14. januar 2003 - 22:23 #10
Nu virker den - bare mere end den skal... Jeg bruger:

$query = "SELECT * from kalender WHERE date >('$date') and comment<>'' order by date";

Nu henter den ALLE udfyldte comment-felter EFTER dags dato. Også dem der ligger en måned fremme...

Det betyder også, at jeg må sortere efter date og ikke time, for så blandes alle datoerne sammen. Kan jeg sætte en hindring på, så den henter de næste poster men KUN frem til næste tomme?
Avatar billede angam Nybegynder
14. januar 2003 - 22:25 #11
Ikke uden at du laver to forespørgsler tror jeg. jakoba?
Avatar billede angam Nybegynder
14. januar 2003 - 22:27 #12
.. men du kan stadigvæk lave en "order by date,time" - så de primært er sorteret efter dato, derefter tidspunkt.
Avatar billede allandk Nybegynder
14. januar 2003 - 22:31 #13
Ahh, smart med to order by :-)
Avatar billede jakoba Nybegynder
14. januar 2003 - 22:32 #14
Jeg tror heller ikke uden 2 queries. hvad med en
    limit 0,5
så bliver det i det mindste ikke overvældende for mange
Avatar billede allandk Nybegynder
14. januar 2003 - 22:34 #15
Tjaaa, men problemet med en limit her er, at jeg aldrig ved, hvor mange ændringer eller aflysninger de forskellige taster ind, så hvis jeg laver en limit på 2 og der kun er 1 post så kommer næste dato med...
Avatar billede angam Nybegynder
14. januar 2003 - 22:34 #16
jeg tror den eneste løsning hvis du vil læse frem til den næste tomme record er at først finde næste dato med fyldte comments, og herefter trække alle data ud for den dato. Noget a'la:

// Find første dato med indhold:
"select * from kalender where date>('$date') and comment<>'' order by date limit 1"

Kopier dato til $date, og find nu alle comments for datoen:
"select * from kalender where date=('$date') order by time"
Avatar billede jakoba Nybegynder
14. januar 2003 - 22:39 #17
jo jeg tror søreme det kan gøres
$query = "
    SELECT *, MIN(date) as temp
    from kalender
    WHERE date >('$date')
      and comment<>''
    order by date
    having date = temp
";

den er utestet, men jeg tror der er en chance
Avatar billede allandk Nybegynder
14. januar 2003 - 22:40 #18
Jeg forsøger lidt med dit sidste forslag...
Avatar billede angam Nybegynder
14. januar 2003 - 22:41 #19
hmm - det er jo nærmest en recursiv query!
Hatten af for dig hvis det virker!
Avatar billede angam Nybegynder
14. januar 2003 - 22:42 #20
Du mangler ihvertfald en GROUP BY et sted
Avatar billede jakoba Nybegynder
14. januar 2003 - 22:45 #21
Ups.  HAVING  skal før  ORDER BY
$query = "
    SELECT *, MIN(date) as temp
    from kalender
    WHERE date >('$date')
      and comment<>''
    having date = temp
    order by date, time
";
Avatar billede angam Nybegynder
14. januar 2003 - 22:46 #22
select *,min(date) as temp where comment<>'' and date>'$date' from workpages group by datehaving date=temp
.. så skulle den muuuligvis være der.

Lavede en test på en tabel der minder om allandk's - det virkede.
Avatar billede angam Nybegynder
14. januar 2003 - 22:48 #23
hmmm... og dog: der kommer kun een record per dag.
Avatar billede allandk Nybegynder
14. januar 2003 - 22:51 #24
:=[ Nixen
Avatar billede allandk Nybegynder
14. januar 2003 - 22:57 #25
Giver det nogen idé, hvis man laver en:
1. query der henter dato næste udfyldte comment
2. query der henter dato for næste tomme comment efter den der lige er fundet
3. query der henter poster mellem de to første queries
Avatar billede allandk Nybegynder
14. januar 2003 - 23:02 #26
Eller hvad med en count row (som limit) fra førstkommende udfyldte comment til næstekommende tomme comment - kan det fixe i én query. Det prøver jeg at bixe sammen...
Avatar billede jakoba Nybegynder
14. januar 2003 - 23:05 #27
ærgeligt
Avatar billede angam Nybegynder
14. januar 2003 - 23:08 #28
Så tror jeg mere på din første løsning (3 queries) - men måske ... :-)

Jeg er hoppet i seng, så "you're on your own". Held og lykke ;-)
Avatar billede allandk Nybegynder
14. januar 2003 - 23:10 #29
Takker indtil videre for den udvidede hjælp - og sov godt |-)
Avatar billede jakoba Nybegynder
14. januar 2003 - 23:13 #30
det er nemt med 2 queries:
$query1 = "
    SELECT MIN(date)
    from kalender
    WHERE date >('$date')
      and comment<>''
";
$rs1 = mysql_query( "$query1" ) or die( mysql_error() );
$den_dag = mysql_result( $rs1, 0, 0 );
$query2 = "
    SELECT *
    from kalender
    WHERE date = '$den_dag'
      and comment<>''
    order by time
";
$rs2 = mysql_query( "$query2" ) or die( mysql_error() );
...osv
Avatar billede allandk Nybegynder
15. januar 2003 - 10:13 #31
Så lykkedes det :-) Jeg kombinerede jeres første forslag med overhovedet at springe til næste udfyldte comment - skippede limit - lavede dernæst en ny query hvor jeg søgte på den funde date:

$query_find_date = "
SELECT MIN(date)
from kalender
WHERE date >('$date') and comment<>''
";

$rs1 = mysql_query( "$query_find_date" ) or die( mysql_error() );
$next_date = mysql_result( $rs1, 0, 0 );

$query_next_date = "
SELECT *
from kalender
WHERE date = '$next_date'
order by date,time
";

Heureka!

Tak for hjælpen til jer begge.

P.S. Jakoba, smider du ikke lige svar?
Avatar billede jakoba Nybegynder
15. januar 2003 - 10:52 #32
ok :)
Avatar billede allandk Nybegynder
15. januar 2003 - 11:17 #33
God dag :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester