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: 45
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!


Pe caut hotel gasesti case si apartamente de inchiriat in regim hotelier.

nevvermind
Senior Member
Mesaje: 1264
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: 45
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.
Pe caut hotel gasesti case si apartamente de inchiriat in regim hotelier.

nevvermind
Senior Member
Mesaje: 1264
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: 45
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!
Pe caut hotel gasesti case si apartamente de inchiriat in regim hotelier.


Înapoi la “Cod PHP”

Cine este conectat

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