Ajutor cod rezervari

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

clickymedia
Junior Member
Mesaje: 41
Membru din: Mie Iun 17, 2015 2:11 pm
Contact:

Ajutor cod rezervari

Mesajde clickymedia » Dum Noi 15, 2015 1:22 pm

Salut,

tabel_rezervari: id, id_barca, id_sofer, data_start, data_end
tabel_barci: id, nume_barca
tabel_soferi: id, nume_sofer

Pot scoate dintr-un singur select barcile si soferii care sunt liberi in anumite intervale.
Ex.: Sofer 1, Barca 1, rezervare 15-11-2015 13:00:00 - 15-11-2015 15:00:00
Daca selectez data de 15-11-2015 14:00:00 nu vreau sa mai am soferul 1 si bara 1

Multumesc!


Recent am creat 1 site cu mobila second hand si canapele second hand in Bucuresti.

nevvermind
Senior Member
Mesaje: 1242
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Ajutor cod rezervari

Mesajde nevvermind » Dum Noi 15, 2015 5:49 pm

Daca data_start, data_end au un tip de date calendarstic (timestamp, date, datetime), poti folosi BETWEEN.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

clickymedia
Junior Member
Mesaje: 41
Membru din: Mie Iun 17, 2015 2:11 pm
Contact:

Re: Ajutor cod rezervari

Mesajde clickymedia » Lun Noi 16, 2015 1:02 pm

nevvermind scrie:Daca data_start, data_end au un tip de date calendarstic (timestamp, date, datetime), poti folosi BETWEEN.

data_start, data_end sunt setate ca (datetime 0000-00-00 00:00:00)
Eu am incercat ceva de genu dar nu merge:
SELECT b.nume_barca FROM tabel_rezervari a, tabel_barci b WHERE a.id_barca!=b.id AND data_start>='$data_start' AND data_end<=$data_end

Am 3 barci adaugate: barca 1, barca 2, barca 3
Si am urmatoarele rezervari:
2015-11-11 12:00:00 - 2015-11-11 14:00:00 => Barca 1
2015-11-11 14:00:00 - 2015-11-11 16:00:00 => Barca 2
Si daca vreau sa fac o rezervare intre 2015-11-11 13:00:00 - 2015-11-11 15:00:00 vreau sa pot selecta doar barca 3

Am incercat mai multe variante dar nu imi iese ce am nevoie.
Recent am creat 1 site cu mobila second hand si canapele second hand in Bucuresti.

nevvermind
Senior Member
Mesaje: 1242
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Ajutor cod rezervari

Mesajde nevvermind » Lun Noi 16, 2015 4:31 pm

Fa-ti o noua baza de date si executa codul asta:

Cod: Selectaţi tot

SET FOREIGN_KEY_CHECKS=0;
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

CREATE TABLE `barci` (
  `barca_id` int(11) unsigned NOT NULL,
  `nume` varchar(255) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `barci` (`barca_id`, `nume`) VALUES
(1, 'barca 1'),
(2, 'barca 2'),
(3, 'barca 3');

CREATE TABLE `rezervari` (
  `rezervare_id` int(11) unsigned NOT NULL,
  `barca_id` int(11) unsigned DEFAULT NULL,
  `sofer_id` int(11) unsigned DEFAULT NULL,
  `data_start` datetime NOT NULL,
  `data_end` datetime NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO `rezervari` (`rezervare_id`, `barca_id`, `sofer_id`, `data_start`, `data_end`) VALUES
(1, 1, 1, '2015-11-15 12:00:00', '2015-11-15 16:00:00');

CREATE TABLE `soferi` (
  `sofer_id` int(11) unsigned NOT NULL,
  `nume` varchar(255) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `soferi` (`sofer_id`, `nume`) VALUES
(1, 'sofer 1'),
(2, 'sofer 2'),
(3, 'sofer 3');


ALTER TABLE `barci`
  ADD PRIMARY KEY (`barca_id`);

ALTER TABLE `rezervari`
  ADD PRIMARY KEY (`rezervare_id`),
  ADD KEY `barca_id` (`barca_id`),
  ADD KEY `sofer_id` (`sofer_id`);

ALTER TABLE `soferi`
  ADD PRIMARY KEY (`sofer_id`);


ALTER TABLE `barci`
  MODIFY `barca_id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;
ALTER TABLE `rezervari`
  MODIFY `rezervare_id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;
ALTER TABLE `soferi`
  MODIFY `sofer_id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;

ALTER TABLE `rezervari`
  ADD CONSTRAINT `barca_id_fk` FOREIGN KEY (`barca_id`) REFERENCES `barci` (`barca_id`) ON DELETE SET NULL ON UPDATE CASCADE,
  ADD CONSTRAINT `sofer_id_fk` FOREIGN KEY (`sofer_id`) REFERENCES `soferi` (`sofer_id`) ON DELETE SET NULL ON UPDATE CASCADE;
SET FOREIGN_KEY_CHECKS=1;


Apoi incearca

Cod: Selectaţi tot

select t3.nume as name_sofer, t2.nume as name_barca, t1.data_start, t1.data_end from rezervari t1
join barci t2 on t1.barca_id = t2.barca_id
join soferi t3 on t1.sofer_id = t3.sofer_id
where '2015-11-15 11:00:00' NOT BETWEEN t1.data_start and t1.data_end
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

clickymedia
Junior Member
Mesaje: 41
Membru din: Mie Iun 17, 2015 2:11 pm
Contact:

Re: Ajutor cod rezervari

Mesajde clickymedia » Mar Dec 01, 2015 9:39 pm

Salut,

Codul de mai jos ar trebui sa afiseze barcile care nu sunt rezervate dar nu functioneaza cum trebuie

Cod: Selectaţi tot

if ( $db->query("SELECT id FROM rezervari WHERE id_barca='$id_barca' AND (('$data_start' BETWEEN data_start AND data_end) OR ('$data_end' BETWEEN data_start AND data_end))") < 1) {
     //barci de rezervat
}


In tabelul barci am: barca 1, barca 2, barca 3
In tabelul rezervari am:
- rezervare 1 de la 10 - 11 -> barca 1
- rezervare 2 de la 13 - 14 -> barca 1

Cand adaug o rezervare noua de la 12 la 15 ($data_start = "2015-12-01 12:00:00" ; $data_end = "2015-12-01 15:00:00" ) nu vreau sa mai apara si barca 1

Am rezolvat problema inlocuind

Cod: Selectaţi tot

('$data_start' BETWEEN data_start AND data_end) OR ('$data_end' BETWEEN data_start AND data_end)

cu

Cod: Selectaţi tot

('$data_start' BETWEEN data_start AND data_end) OR ('$data_end' BETWEEN data_start AND data_end) OR (data_start BETWEEN '$data_start' AND '$data_end') OR (data_end BETWEEN '$data_start' AND '$data_end')


Va multumesc si imi cer scuze pentru post!
Recent am creat 1 site cu mobila second hand si canapele second hand in Bucuresti.


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 2 vizitatori