Wojtek Rak

Wojtek Rak Fight-Poland

Temat: Pobranie danych z bazy i wrzucenie do arraya

Witam, potrzebuje zrobić cos takiego, że pobieram dane z bazy za pomoca tej kwerendy:
select czas, nazwa_zabiegu from zabiegi
i wywoluje to za pomoca tego:

//pobranie wyniku zapytania
$wynik = $conn->query($zapytanie);
//obliczanie ilości rekordów
$ile_znalezionych = $wynik->num_rows;

// budowanie tabeli dla naszych danych
echo '<table>';
echo '<tr><td>Imie</td><td>Nazwisko</td></tr>';
//pętla po rekordach z bazy
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = $wynik->fetch_assoc();
echo '<tr>';
echo '<td>'.$wiersz['nazwa_zabiegu'].'</td>';
echo '<td>'.$wiersz['czas'].'</td>';
echo '</tr>';
if( $i == $ile_znalezionych){
break;
}
}
echo '</table>';
?>


i wyświetla wszystkie dane z bazy a potrzebuje wrzucić to do tablicy bym mogl wyswietlac pojedyncze rekordy lub je po prostu porównywać a nie za bardzo teraz ogarniam jak to zrobic. Ktoś mogłby coś podpowiedziec ?Ten post został edytowany przez Autora dnia 25.10.15 o godzinie 14:45
Janusz Skudrzyk

Janusz Skudrzyk Członek zarządu,
weblabs.pl

Temat: Pobranie danych z bazy i wrzucenie do arraya

Nie będzie prościej i szybciej porównać sobie w phpmyadminie?
Wojtek Rak

Wojtek Rak Fight-Poland

Temat: Pobranie danych z bazy i wrzucenie do arraya

a w jaki sposob ?
EDIT: ogolnie to co musze zrobic to jest cos takiego:
Po wybraniu danego dnia na ktory chce sie umowic, wpisaniu danych i wybraniu zabiegu, kod sprawdza czy ogolnie godzina, ktora wczesniej tam sobie wybralem jest wolna ( to to mam zrobione ). Jesli tak to wrzuca rekord do bazy jesli nie to nie wrzuca => Czyli odpowiada to po prostu sprawdzeniu czy rekord istnieje czy nie. I teraz zamierzam dodać takie coś, że w formularzu wybieram zabieg do ktorego jest przypisany czas trwania oraz jesli zabieg trwal godzine to do bazy wpada ze dana osoba jest np zajeta od 7:00 do 8:30 ( 1,5h z tego powodu ze zabeig trwa godzine i na dojazd jeszcze 30 min) lub w innym przypadku jesli zabieg trwa 30 min to dana osoba jest zajeta od 7:00 do 8:00 bo 30 min zabiegu i 30 min na dojazd.

Przykład: wybieram date 07.07.2015, godzina 12:00, wybieram zabieg godzinny. Udaje mi sie zarejestrowac. Następna osoba moze zarejestrować sie dopiero 07.0.7.2015 o 13:30. Nie wiem czy zrozumiale wytlumaczylem.Ten post został edytowany przez Autora dnia 25.10.15 o godzinie 17:30
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: Pobranie danych z bazy i wrzucenie do arraya

Kod:
if( $i == $ile_znalezionych){
break;
}
możesz ogóle wyrzucić bo te wartości wewnątrz nigdy nie będą równe z uwagi na
for ($i=0; $i <$ile_znalezionych; $i++)
bo do pętli nie wejdzie w przypadku gdy $i == $ile_znalezionych.

Jeżeli w tabeli "zabiegi" trzymasz informację o umówionych zabiegach to powinieneś trzymać tam czas dodania rekordu, czas początku oraz czas zakończenia zabiegu. Wtedy będziesz mógł wyciągnąć bardzo dużo i nie będziesz musiał zbyt dużo przetwarzać po stronie kodu.

Przykład dla PostgreSQL:
Przykład tabeli
DROP TABLE IF EXISTS zabiegi;
DROP TABLE IF EXISTS zabiegi_nazwy;

CREATE TABLE zabiegi_nazwy(
id INT PRIMARY KEY,
nazwa TEXT,
czas_trwania INTERVAL,
czas_dojazdu INTERVAL
);

CREATE TABLE zabiegi(
id INT PRIMARY KEY,
_od TIMESTAMP,
_do TIMESTAMP,
nazwa_zabiegu INT,
dodano TIMESTAMP DEFAULT NOW(),
CONSTRAINT zabiegi_od_do_uq UNIQUE (_od, _do),
CONSTRAINT zabiegi_nazwa_zabiegu_fkey FOREIGN KEY (nazwa_zabiegu)
REFERENCES zabiegi_nazwy (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
);

INSERT INTO zabiegi_nazwy VALUES (1, 'Zabieg A', '1 hour', '30 minutes');
INSERT INTO zabiegi_nazwy VALUES (2, 'Zabieg B', '30 minutes', '30 minutes');

INSERT INTO zabiegi VALUES (1, '2015-01-05 15:00:00', '2015-01-05 15:00:00'::TIMESTAMP + (SELECT czas_trwania + czas_dojazdu FROM zabiegi_nazwy WHERE id = 2), 2, NOW());
INSERT INTO zabiegi VALUES (2, '2015-01-05 18:00:00', '2015-01-05 18:00:00'::TIMESTAMP + (SELECT czas_trwania + czas_dojazdu FROM zabiegi_nazwy WHERE id = 1), 1, NOW());
INSERT INTO zabiegi VALUES (3, '2015-01-05 20:00:00', '2015-01-05 20:00:00'::TIMESTAMP + (SELECT czas_trwania + czas_dojazdu FROM zabiegi_nazwy WHERE id = 2), 2, NOW());
Idea prosta. Tabela "zabiegi_nazwy" zawiera nazwę, opis zabiegu, czas trwania dla klienta oraz czas trwania przygotowania/dojazdu. Dla klienta kolumna "czas_trwania" dla usługodawcy czas poświęcony na klienta dla zabiegu "czas_trwania + czas_dojazdu". Tabela zabiegi to bardziej kalendarz.

Teraz wyświetlenie terminów wolnych/zajętych dla zadanego okresu czasu dla danego rodzaju zabiegu (różne terminy bo zróżnicowanie długości zabiegu) to:
*wszystkie terminy wolne + zajęte
SELECT DISTINCT ON (r.godziny) r.godziny, z.* FROM (
SELECT generate_series('2015-01-05 09:00:00', '2015-01-05 21:00:00',
(SELECT czas_trwania + czas_dojazdu FROM zabiegi_nazwy WHERE id = 2)) AS godziny
) as r
LEFT JOIN zabiegi z ON r.godziny BETWEEN z._od AND z._do - '1 minute'::INTERVAL
*wszystkie terminy wolne
SELECT DISTINCT ON (r.godziny) r.godziny, z.* FROM (
SELECT generate_series('2015-01-05 09:00:00', '2015-01-05 21:00:00',
(SELECT czas_trwania + czas_dojazdu FROM zabiegi_nazwy WHERE id = 2)) AS godziny
) as r
LEFT JOIN zabiegi z ON r.godziny BETWEEN z._od AND z._do - '1 minute'::INTERVAL
WHERE z.id IS NULL
Sprawdzenie czy dana data i godzina mogą być zarezerwowane dla danego rodzaju zabiegu (true = można zarezerwować, false = już zarezerwowane):
SELECT CASE WHEN x.id IS NULL THEN TRUE ELSE FALSE END AS wolna FROM (
SELECT DISTINCT ON (r.godziny) r.godziny, z.* FROM (
SELECT generate_series('2015-01-05 09:00:00', '2015-01-05 21:00:00',
(SELECT czas_trwania + czas_dojazdu FROM zabiegi_nazwy WHERE id = 2)) AS godziny
) as r
LEFT JOIN zabiegi z ON r.godziny BETWEEN z._od AND z._do - '1 minute'::INTERVAL
WHERE r.godziny = '2015-01-05 14:00:00'
) AS x
Z takich konstrukcji możesz łatwo planować zabiegi trwające 1h w dziurach np po zabiegach dłuższych. Od razu widzisz gdzie masz wystarczająco dużo czasu dla danego zabiegu. Jak odwoła ci się zabieg trwający np 3h to będziesz mógł w to miejsce zaplanować/zarezerwować 2x1,5h lub 3x1h albo 1x1,5h i 1x1h. z 30-min dziurą (np na przerwę dla pracownika :) - w końcu jeść muszą...). Database sam ci powie co i gdzie i nie musisz tego robić iteracyjnie w kodzie.
Z kodu nie wywnioskowałem jaka baza danych więc przykłady zrobione pod taką, w której przypadło mi pracować na co dzień...

A no i jeszcze o podpowiadaniu pierwszego wolnego terminu w danym zakresie zapomniałem
SELECT DISTINCT ON (r.godziny) r.godziny, z.* FROM (
SELECT generate_series('2015-01-05 09:00:00', '2015-01-05 21:00:00',
(SELECT czas_trwania + czas_dojazdu FROM zabiegi_nazwy WHERE id = 2)) AS godziny
) as r
LEFT JOIN zabiegi z ON r.godziny BETWEEN z._od AND z._do - '1 minute'::INTERVAL
ORDER BY r.godziny LIMIT 1
Ten post został edytowany przez Autora dnia 25.10.15 o godzinie 20:10
Wojtek Rak

Wojtek Rak Fight-Poland

Temat: Pobranie danych z bazy i wrzucenie do arraya

no mam mysql, wiec mozna to tak samo zrobic ?

Wgl dziekuje za taką odpowiedz ! Musze to zrobić bo strasznie mnie to gryzie :)



Wyślij zaproszenie do