Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Godziny przyjęć
piotr485
post
Post #1





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Stworzyłem tabele:
SKLEP id nazwa
CZYNNE id od do id_dzien id_sklep
DZIEN id dzien

w tabeli DZIEN mam id od 1 do 7 (poniedziałek, wtorek ...) w tabeli CZYNNE przypada 7 rekordów na każdy dzień tygodnia

mam problem z zapytaniem

  1. SELECT sklep.id, sklep.nazwa_firmy, czynne.od AS od, czynne.do AS do
  2. FROM sklep, czynne, dzien
  3. WHERE sklep.id = czynne.id_sklep



tylko tyle mi sie dalo napisac, nie wiem jak to zmontowac,

ktos wie jak uzyskac dostep do od_poniedzialek od_wtorek itd. itp.
ktos nakieruje pomoże ?

Ten post edytował kwiateusz 7.08.2009, 20:26:06
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Tabele:
SKLEP (ID, NAZWA)
CZYNNE (ID, DZIEN, ID_SKLEP, OD, DO)

Nie widzę potrzebu zapisywania jaki id dnia co oznacza. To raczej się nie zmienia. Zapisz w PHP tablicę dni, lub ustaw locale na PL.

  1. SELECT
  2. `SKLEP`.`ID`,
  3. `SKLEP`.`NAZWA`,
  4. `CZYNNE`.`OD` AS `OD`,
  5. `CZYNNE`.`DO` AS `DO`
  6. FROM `SKLEP` JOIN `CZYNNE` ON `CZYNNE`.`ID_SKLEP` = `SKLEP`.`ID`
  7. WHERE `SKLEP`.`DZIEN` BETWEEN 1 AND 3;


--------------------
Go to the top of the page
+Quote Post
piotr485
post
Post #3





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Coś nie bardzo mi wychodzi zmieniłem trochę tabelę z zastosowaniem twojego kodu, taki maly katalog ale nie bardzo wiem jak odwołać się do tej tablicy po za tym wyrzuca mi błąd.

Not unique table/alias: 'czynne'


  1. SELECT katalog_firm.id, katalog_firm.nazwa_firmy, ulica.ulica AS ulica, miasta.miasto AS miasto, czynne.od AS od, czynne.do AS do
  2. FROM katalog_firm JOIN czynne ON czynne.id_katalog = katalog_firm.id, ulica, miasta, czynne
  3. WHERE katalog_firm.id_ulica = ulica.id AND katalog_firm.id_miasto = miasta.id AND katalog_firm.dzien BETWEEN 1 AND 3
  4. ORDER BY nazwa_firmy
Go to the top of the page
+Quote Post
vokiel
post
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Join odnosi się tylko do jednej tabeli.

  1. SELECT
  2. `katalog_firm`.`id`,
  3. `katalog_firm`.`nazwa_firmy`,
  4. `ulica`.`ulica` AS `ulica`,
  5. `miasta`.`miasto` AS `miasto`,
  6. `czynne`.`od` AS `od`,
  7. `czynne`.`do` AS `do`
  8.  
  9. FROM `katalog_firm` JOIN `czynne` ON `katalog_firm`.`id` = `czynne`.`id_katalog`,
  10. JOIN `ulica` ON `katalog_firm`.`id_ulica` = `ulica`.`id`,
  11. JOIN `miasta` ON `katalog_firm`.`id_miasto` = `miasta`.`id`
  12.  
  13. WHERE `katalog_firm`.`dzien` BETWEEN 1 AND 3
  14. ORDER BY `katalog_firm`.`nazwa_firmy`


Jak to nie pomoże to daj dumpa bazy, nie chce mi się kombinować w pamięci sciana.gif


--------------------
Go to the top of the page
+Quote Post
piotr485
post
Post #5





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Może napiszę dokładnie jak wygląda moja baza.

CZYNNE
id
od
do
id_dzien
id_katalog

DZIEN
id
dzien
(1 - poniedziałek, 2 - wtorek, 3 śr, 4- czw, 5 - piat, 6 - sob, 7 - niedz)

KATALOG_FIRM
id
nazwa_firmy

W sumie dopiero teraz patrzę, że nie ma żadnego połączenia między KATALOG_FIRM, a CZYNNE - jakie pole jeszcze by trzeba dodac do KATALOG_FIRM ?

Tabela czynne posiada takie wpisy:
id od do id_dzien id_katalog
1 08:00:00 17:00:00 1 1
2 10:00:00 16:00:00 2 1
3 09:00:00 18:00:00 3 1
4 08:00:00 18:00:00 4 1
5 16:00:00 18:00:00 5 1
6 12:00:00 18:00:00 6 1
7 12:00:00 20:00:00 7 1
8 08:00:00 20:00:00 1 2
9 15:00:00 18:00:00 2 2
10 08:00:00 15:00:00 3 2
11 00:00:00 00:00:00 4 2
12 00:00:00 00:00:00 5 2
13 00:00:00 00:00:00 6 2
14 00:00:00 00:00:00 7 2

Próbowałem stworzyć zapytanie przy pomocy twojej podpowiedzi, ale gdy się zorientowalem ze nie wiem jakie pole wprowadzić i jakie miały by mieć wartości w tabeli KATALOG_FIRM dlatego proszę o nakierowanie
Go to the top of the page
+Quote Post
vokiel
post
Post #6





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Pole łączące KATALOG_FIRM z CZYNNE umieść w tej drugiej (czy nie masz już tego w polu id_katalog).


--------------------
Go to the top of the page
+Quote Post
piotr485
post
Post #7





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Cytat(vokiel @ 6.08.2009, 19:55:41 ) *
Pole łączące KATALOG_FIRM z CZYNNE umieść w tej drugiej (czy nie masz już tego w polu id_katalog).


Nie bardzo rozumiem o co ci chodzi. Hmm w sumie teraz tak patrzę to chyba nie potrzebuję już dodatkowego pola ? Sam już się pogubiłem. Potrzebuje dodatkowe pole w tabeli KATALOG_FIRM ?

Moje zapytanie wygląda na razie następująco:
  1. SELECT katalog_firm.id,
  2. katalog_firm.nazwa_firmy,
  3. katalog_firm.adres,
  4. ulica.ulica AS ulica,
  5. miasta.miasto AS miasto,
  6. podkategorie.podkategoria AS podkategoria
  7.  
  8. FROM katalog_firm JOIN podkategorie ON katalog_firm.id_podkategoria = podkategorie.id
  9. JOIN ulica ON katalog_firm.id_ulica = ulica.id
  10. JOIN miasta ON katalog_firm.id_miasto = miasta.id
  11.  
  12. ORDER BY nazwa_firmy


Tutaj mi wszystko działa, reszty tabel nie podawałem bo nie ma takiej potrzeby, próbowałem zrobić tak jak wcześniej radziłeś, ale niestety niewychodziło.

Jak to rozdzielić ? oczywiście chciałbym wyświetlać w ten sposób $od $do tylko nie wiem jak to zapisać, na pewno fajnie by było jak by były podane dane od poniedziałku do piątku takie same godziny, to aby się łączyło i tylko tak pokazywało, a jak różne to po kolei: poniedzialek, wtorek: no, ale myślę, że za daleko wybiegam skoro nie mogę tego rozgryźć, spróbuje ktoś pomóc nakierować ?
Go to the top of the page
+Quote Post
motylo
post
Post #8





Grupa: Zarejestrowani
Postów: 35
Pomógł: 5
Dołączył: 13.07.2008
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


To będzie oddzielne:

  1. SELECT
  2. czynne.od AS od, czynne.do AS do, dzien.dzien AS dzien
  3. FROM czynne JOIN dzien ON (czynne.id_dzien=dzien.id)
  4. WHERE czynne.id_katalog="ID_FIRMY"


Natomiast do tego ostatniego wybierającego:

  1. SELECT katalog_firm.id [b]AS id[/b],
  2. katalog_firm.nazwa_firmy,
  3. katalog_firm.adres,
  4. ulica.ulica AS ulica,
  5. miasta.miasto AS miasto,
  6. podkategorie.podkategoria AS podkategoria,
  7. [b]czynne.od AS od, czynne.do AS do, dzien.dzien AS dzien [/b]
  8.  
  9. FROM katalog_firm JOIN podkategorie ON katalog_firm.id_podkategoria = podkategorie.id
  10. JOIN ulica ON katalog_firm.id_ulica = ulica.id
  11. JOIN miasta ON katalog_firm.id_miasto = miasta.id
  12. [b]JOIN czynne ON katalog_firm.id = czynne.id_katalog
  13. JOIN dzien ON czynne.dzien = dzien.id[/b]
  14.  
  15. ORDER BY nazwa_firmy


Jednakże za każdym razem będzie dodawać ci dane firmy do zapytania.

Lepszym rozwiązaniem będzie pobranie danych firm przez Twoje zapytanie, a następnie w PHP
  1. <?php
  2. $_katalog   =  $db->query("select...from...katalog_firm");
  3.  foreach($_katalog as $firma){
  4.  
  5.    //wypisz dane firmy
  6.    //wykonaj zapytanie z pobieraniem godzin otwarć przez przekazanie
  7.    //parametru $firma
  8.    $_czynne  = $db->query("select...from...czynne...czynne.id_katalog={$firma['id']}");
  9.    if(is_array($_czynne)){
  10.  
  11.      foreach($_czynne as $_dzien){
  12.         echo 'od: '.$_dzien['od'].' do: '.$_dzien['do'].' dzien: '.$_dzien['dzien'];
  13.      }
  14.  
  15.    }
  16.  
  17.  }
  18. ?>


Ten post edytował kwiateusz 7.08.2009, 20:26:24


--------------------
Więcej: blog.juszczak.org
Go to the top of the page
+Quote Post
Spawnm
post
Post #9





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Proszę używać BBcode.
Go to the top of the page
+Quote Post
piotr485
post
Post #10





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Tutaj połączyłeś obiektowość ze struktura o ile się nie mylę. A przy używaniu obiektowosci polaczenie musi wygladac innaczej czy mi sie wydaje ?
Moje polacznie wykonuje w ten sposob includujac plik:

  1. define('SQL_HOST', 'sql............');
  2. define('SQL_USER', '.......);
  3. define('SQL_PASS', '.....');
  4. define('SQL_DB', '........');
  5.  
  6. $db = mysql_connect(SQL_HOST,SQL_USER,SQL_PASS) or die ( 'Nie nawiazano polaczenia z serwerem'.mysql_error());
  7. mysql_select_db( SQL_DB, $db ) or die ( 'Nie nawiazano polaczenia z baza'.mysql_error());


A moj kod wyglada tak:

  1. require_once('../polaczenie.php');
  2.  
  3. $_katalog = $db->query("
  4.  
  5. SELECT katalog_firm.id AS id,
  6. katalog_firm.nazwa_firmy,
  7. katalog_firm.adres,
  8. ulica.ulica AS ulica,
  9. miasta.miasto AS miasto,
  10. podkategorie.podkategoria AS podkategoria,
  11. czynne.od as od, czynne.do as do, dzien.dzien as dzien
  12.  
  13. FROM katalog_firm JOIN podkategorie ON katalog_firm.id_podkategoria = podkategorie.id
  14. JOIN ulica ON katalog_firm.id_ulica = ulica.id
  15. JOIN miasta ON katalog_firm.id_miasto = miasta.id
  16. JOIN czynne ON katalog_firm.id = czynne.id_katalog
  17. JOIN dzien ON czynne.dzien = dzien.id
  18.  
  19. ORDER BY nazwa_firmy
  20.  
  21. ");
  22. foreach($_katalog as $firma){
  23.  
  24. //wypisz dane firmy
  25. //wykonaj zapytanie z pobieraniem godzin otwarć przez przekazanie
  26. //parametru $firma
  27. $_czynne = $db->query("
  28.  
  29. SELECT czynne.od AS od, czynne.do AS do, dzien.dzien AS dzien
  30. FROM czynne JOIN dzien ON (czynne.id_dzien=dzien.id)
  31. WHERE czynne.id_katalog=1
  32.  
  33. ");
  34. if(is_array($_czynne)){
  35.  
  36. foreach($_czynne as $_dzien){
  37. echo 'od: '.$_dzien['od'].' do: '.$_dzien['do'].' dzien: '.$_dzien['dzien'];
  38. }
  39.  
  40. }
  41.  
  42. }


Za daleko nie jadę bo już w 4 lini wyskakuje mi blad
  1. Fatal error: Call to a member function query() on a non-object in /home/czynne.php on line 4


O co chodzi ?
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Daj sobie var_dump na $db i zobacz, czy na pewno masz połączenie...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
piotr485
post
Post #12





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Nie no połączenie jest na pewno.
Dałem i przed błędem pokazuje się dodatkowo:
  1. resource(2) of type (mysql link)


Co z tym fantem ?
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$db powinno być obiektem a nie jakims "resource"


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotr485
post
Post #14





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Jest taki problem, że kolega podał gotowca w obiektowości, a ja póki co nie programuje obiektowo tylko strukturalnie i moje połączenie też takie jest.
Ogólnie wolę podpowiedzi niż gotowca - wiadoma sprawa bo tak to się niczego nie nauczę, a więc jak zamienic ten kod na strukture?

  1. $_katalog = $db->query("select...from...katalog_firm");
  2. foreach($_katalog as $firma){
  3.  
  4. //wypisz dane firmy
  5. //wykonaj zapytanie z pobieraniem godzin otwarć przez przekazanie
  6. //parametru $firma
  7. $_czynne = $db->query("select...from...czynne...czynne.id_katalog={$firma['id']}");
  8. if(is_array($_czynne)){
  9.  
  10. foreach($_czynne as $_dzien){
  11. echo 'od: '.$_dzien['od'].' do: '.$_dzien['do'].' dzien: '.$_dzien['dzien'];
  12. }
  13.  
  14. }
  15.  
  16. }

Go to the top of the page
+Quote Post
Fifi209
post
Post #15





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Kod, który podałeś jest strukturalny prawie w pełni (nie licząc mysqli)

Albo ja Cię nie rozumiem ^^ wytłumacz dokładniej.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
piotr485
post
Post #16





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


No prawie w pełni bo musiałbym mieć do niego połączenie obiektowe, a nie chcę zaczynać z obiektowoscią.

  1. $_katalog = $db->query("select...from...katalog_firm");


Jak to zamienic na strukture, aby reszta kodu sie zgadzala ?
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://pl2.php.net/manual/pl/function.mysql-query.php
oczywiscie najpierw musi byc mysql_connect(). wszystko masz w manualu opisane


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotr485
post
Post #18





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Nie no tak już robiłem wychodzi coś takiego:

  1. $zapytanie = "
  2. SELECT katalog_firm.id AS id,
  3. katalog_firm.nazwa_firmy AS firma,
  4. katalog_firm.adres,
  5. ulica.ulica AS ulica,
  6. miasta.miasto AS miasto,
  7. podkategorie.podkategoria AS podkategoria,
  8. czynne.od as od, czynne.do as do, dzien.dzien as dzien
  9.  
  10. FROM katalog_firm JOIN podkategorie ON katalog_firm.id_podkategoria = podkategorie.id
  11. JOIN ulica ON katalog_firm.id_ulica = ulica.id
  12. JOIN miasta ON katalog_firm.id_miasto = miasta.id
  13. JOIN czynne ON katalog_firm.id = czynne.id_katalog
  14. JOIN dzien ON czynne.id_dzien = dzien.id
  15.  
  16. ORDER BY nazwa_firmy
  17. ";
  18.  
  19. $_katalog = mysql_query($zapytanie) or die ('Błąd zapytania. <br />Źle napisane zapytanie! <br />Błąd: <font color="red">'.mysql_error().'</font>');
  20.  
  21.  
  22. foreach($_katalog as $firma){
  23.  
  24. //wypisz dane firmy
  25. //wykonaj zapytanie z pobieraniem godzin otwarć przez przekazanie
  26. //parametru $firma
  27.  
  28. $zapytanie2 = "
  29. SELECT czynne.od as od, czynne.do as do, dzien.dzien as dzien
  30. FROM czynne join dzien on (czynne.id_dzien=dzien.id)
  31. WHERE czynne.id_katalog=1
  32. ";
  33.  
  34. $_czynne = mysql_query($zapytanie2) or die ('Błąd zapytania drugiego. <br />Źle napisane zapytanie drugie! <br />Błąd: <font color="red">'.mysql_error().'</font>');
  35.  
  36.  
  37. if(is_array($_czynne)){
  38.  
  39.  
  40.  
  41. foreach($_czynne as $_dzien){
  42.  
  43. echo 'od: '.$_dzien['od'].' do: '.$_dzien['do'].' dzien: '.$_dzien['dzien'];
  44.  
  45. }
  46.  
  47. }
  48. }


i do tego bład:

Warning: Invalid argument supplied for foreach() in /home/zientek/ftp/czynne.php on line 35

Dlatego nie lubię gotowców bo później sam się gubię i nie wiem o co chodzi.

I dlaczego tu jest foreach przeciez nie mam nigdzie tablicy ? Przy obiektowosci sama sie tworzyla przez te inne polaczenie czy co ?

Ten post edytował piotr485 22.09.2009, 07:37:48
Go to the top of the page
+Quote Post
Void
post
Post #19





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

Ostrzeżenie: (0%)
-----


Przecież mysql_query nie zwraca tablicy, użyj wcześniej mysql_fetch_array
Go to the top of the page
+Quote Post
piotr485
post
Post #20





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Jakieś kosmiczne rzeczy mi wychodzą. W ten sposób mam to zrobić ?

  1. $_katalog = mysql_fetch_array(mysql_query($zapytanie)) or die ('Błąd zapytania. <br />Źle napisane zapytanie! <br />Błąd: <font color="red">'.mysql_error().'</font>');


Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 09:22