Avatar billede Slettet bruger
13. april 2010 - 08:26 Der er 18 kommentarer og
1 løsning

hjælp lidt søgening i mysql DB

Hejsa alle sammen !..

Jeg skal ha lavet lidt simpelt søgening i min mysql database :)

jeg har 3 felter i mysql start_dato, mellem_dato, slut_dato.
de 3 felter indeholder kun timestamp's.

Når en bruger søger efter en dato på siden bliver den lavet om til et timestamp. hvordan skal min query se ud for at se tjekker i alle 3 tabel rækker. håber i forstår. eller skriver i bare lige så uddyber jeg :)

Go' morgen.
/db
Avatar billede repox Seniormester
13. april 2010 - 08:59 #1
Skal du søge på de præcise datoer eller er det intervaller du vil søge i? Jeg hæfter mig lidt ved at du har et felt kaldet mellem_dato...
Avatar billede Slettet bruger
13. april 2010 - 09:24 #2
Det skal fungere på denne måde:

Jeg har brugerens dato/timestamp (den dato brugeren gerne vil søge efter).

Og det timestamp skal tjekkes i de 3 tabel rækker, hvis datoen findes i databasen skal der udskrives en fejl besked, hvis datoen ikke findes skal der udskrives en anden besked.

håber det hjalp :)
Avatar billede repox Seniormester
13. april 2010 - 10:07 #3
<?php
$sql = "SELECT * FROM table WHERE start_dato=timestamp OR mellem_dato=timestamp OR slut_dato=timestamp"
$res = mysql_query($sql);

if(mysql_num_rows($res) > 0)
  echo "Datoen er fundet";
else
  echo "Datoen blev ikke fundet";

?>
Avatar billede Slettet bruger
13. april 2010 - 10:10 #4
Jeg afprøver lige når jeg kommer hjem og vender så tilbage :)

.db
Avatar billede Slettet bruger
13. april 2010 - 15:33 #5
Hej igen. jeg er stødt ind i et andet problem før jeg kan få testet det kode du skrev :)

Jeg troede at mine timestamps var rigtige nok, men det er de jo self. ikke :-/

Beskriver lige problemet:
Jeg har to værdier fra to select bokse fx. 4 og 7(D. 4/7). det smider jeg i en mktime(0,0,0,$4,$7,"2010") hvilket skulle give et unikt timestamp for lige præcis D. 4/7/2010.

Men når jeg tester får jeg datoen 01/Jan/1970.

Hvad gør jeg galt? vil i se mer' kode eller lign.?:)

.db
Avatar billede dkfire Nybegynder
13. april 2010 - 15:46 #6
Ja mer kode vil nok være en ide ;-)

Og hvad er så mening med 'mellem_dato' ?
Avatar billede Slettet bruger
13. april 2010 - 17:30 #7
Jeg ved ikke helt hvad for noget kode jeg mer skal smide ind :)

Men jeg har 2 variabler med tal hvilket udgør en dato fx. 4/7 og smider 2010 i enden så datoen hedder 4/7/2010, hvordan får jeg lavet den dato om til et unikt timestamp? Når det fungere kan jeg komme videre.

.db
Avatar billede dkfire Nybegynder
13. april 2010 - 19:54 #8
Måske du skulle vise den kode som du tester ?

Og så mangler du stadig at forklare hvad de enkelt felter i tabel i din database står for.
Avatar billede Slettet bruger
13. april 2010 - 20:10 #9
Det er til et lille booking system af et forsamlingshus man kan leje det fra 1 - 3 dage, der af de 3 dato felter (start_dato, mellem_dato, slut_dato) det er måske ikke de bedste navne men det kom de nu en gang til at hedde.

kode hvor de 3 timestamps skal bruges:

<?php
$frastamp = mktime(0,0,0,$fradag,$framaaned,"2010");
    $mellemstamp = mktime(0,0,0,$mellemdag,$mellemmaaned,"2010");
    $slutstamp = mktime(0,0,0,$tildag,$tilmaaned,"2010");
   
  $fra_sql = "SELECT * FROM avls_booking WHERE start_dato='$frastamp' OR mellem_dato='$frastamp' OR slut_dato='$frastamp'";
  $query1 = mysql_query($fra_sql)or die(mysql_error());
  if(mysql_num_rows($query1) > 0) {
      echo date("d/m/Y",$frastamp)." findes allerede.";
      exit();
  }
 
  $mellem_sql = "SELECT * FROM avls_booking WHERE start_dato='$mellemstamp' OR mellem_dato='$mellemstamp' OR slut_dato='$mellemstamp'";
  $query2 = mysql_query($mellem_sql)or die(mysql_error());
    if(mysql_num_rows($query2) > 0) {
      echo date("d/m/Y",$mellemstamp)." findes allerede.";
      exit();
  }

  $til_sql = "SELECT * FROM avls_booking WHERE start_dato='$tilstamp' OR mellem_dato='$tilstamp' OR slut_dato='$tilstamp'";
  $query3 = mysql_query($til_sql)or die(mysql_error());
  if(mysql_num_rows($query3) > 0) {
      echo date("d/M/Y",$tilstamp)." findes allerede.";
      exit();
  }
?>

.db
Avatar billede dkfire Nybegynder
13. april 2010 - 20:30 #10
Hvad skal du bruge en mellem_dato til så ?
Er det ikke nok at have en start dato og en slut dato ?
Avatar billede dkfire Nybegynder
13. april 2010 - 20:35 #11
Der ud over så er der en klar fejl du laver.
mktime() godtager kun tal værdier som parameter, "2010" giver en streng.

$frastamp = mktime(0,0,0,intval($fradag),intval($framaaned), 2010);

Laver du noget tjek på om brugen indtaster 3 på hinanden efterfølgende dage ?
Hvad sker der hvis brugen ikke har valgt en mellem_dato, hvis han/hun kun vil have to dage ?
Avatar billede Slettet bruger
13. april 2010 - 21:11 #12
mellem_dato er for at få alle 3 datoer i databasen.

jeg har ikke andet tjek end det jeg har postet endnu da jeg er gået lidt i stå nu hvor de her timestamps ikke virkede rigtigt.

Ville du lave databasen på en anden måde med dato felterne?
alle 3 datoer skal jo stå som optaget hvis man har lejet det i 3 dage.
Avatar billede dkfire Nybegynder
13. april 2010 - 21:25 #13
Jeg ville nok vælge bare at have en start og en slut dato.
Så kan du altid tjekke hvor mange dage de dækker over samt om perioden er opdaget. Det findes der smarte mysql funktioner til.
Avatar billede Slettet bruger
13. april 2010 - 21:41 #14
Burde jeg slette mellem_dato og arbejde i kun at have en start og en slut dato? jeg syntes det lyder mere "besværligt" og giver en masse unødvendig kode :) det kan godt være det bare er mig?:)

Lukker ned nu men er tilbage i morgen.

hilsen Dan :)
Avatar billede dkfire Nybegynder
13. april 2010 - 21:47 #15
Vil næppe tro det giver dig mere kode at have et tidsrum i stedet for 3 enkelt dage.

Hvad sker der hvis det bliver tilladt at bruge mere end 3 dage ? Hvor vil du løse det ?
Avatar billede Slettet bruger
14. april 2010 - 08:18 #16
Hvis det bliver tilladt at leje det mere end 3 dage, er der ligepludselig en masse kode jeg skal ind og ændre, det kan jeg godt se :-/ men det må jeg tage til den tid, nu skal jeg ha det til at virke, så kan jeg starte på en mere "dynamisk" version bagefter :)
Avatar billede dkfire Nybegynder
14. april 2010 - 10:37 #17
Jeg kan med én simpel sql-sætning tjekke om tiden er optaget, kun med brug af start og slut dato.

Du mangler også at tjekke om de 3 dage hænger sammen.

Jeg lavede engang for lang tid siden en lille kalender, hvor man kunne book tider. Måske du kan bruge det til noget:
http://www.eksperten.dk/spm/767295
Avatar billede Slettet bruger
15. april 2010 - 16:26 #18
Den vil jeg lige tage et kig på også, men nu vil jeg ha det her færdig, så kan det være den komme i en 2. udgave :) dkfire og repox, smider i et svar så vi kan få den her lukket :)
Avatar billede dkfire Nybegynder
25. maj 2010 - 12:47 #19
Et svar ;-) ( Måske lidt forsinket, men faldt over spørgsmål )
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