Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalne pobieranie danych dla pętli
Forum PHP.pl > Forum > PHP
DUMMY-STUDIO
Witam, przedstawię najpierw kod, potem mój problem:

  1. <?php
  2. $day = $_GET['day'];
  3. $mouth = $_GET['mouth'];
  4. $year = $_GET['year'];
  5.  
  6. if($mouth > (date("n")+3)){
  7. if($year == date("Y")){
  8. header("Location: day.php?day=".date("d")."&mouth=".date("n")."&year=".date("Y"));
  9. }
  10. }
  11. function miesiac_pl($mies) {
  12.  
  13. $mies_pl = array(1=>"Stycznia", "Lutego", "Marzec", "Kwietnia", "Maja", "Czerwieca", "Lipieca", "Sierpnia", "Września", "PaĽdziernika", "Listopada", "Grudnia");
  14.  
  15. return $mies_pl[$mies];
  16. }
  17.  
  18. function dni_mies($mies,$rok) {
  19.  
  20. if (checkdate($mies, 31, $rok)){
  21. $dni = 31;
  22. }elseif (checkdate($mies, 30, $rok)){
  23. $dni = 30;
  24. }elseif (checkdate($mies, 29, $rok)){
  25. $dni = 29;
  26. }elseif (checkdate($mies, 28, $rok)){
  27. $dni = 28;
  28. }
  29.  
  30. return $dni;
  31. }
  32.  
  33. function gen_link($dir){
  34. global $day, $mouth, $year;
  35. $d = $day;
  36. $m = $mouth;
  37. $y = $year;
  38. if($dir == "back"){
  39. if($day-1 == 0){
  40. if($mouth == 1){
  41. $d = dni_mies(12, $y-1);
  42. $m = 12;
  43. $y--;
  44. }else{
  45. $d = dni_mies($m, $y);
  46. $m--;
  47. }
  48. }else{
  49. $d--;
  50. }
  51. $link = "<a href='day.php?day=$d&mouth=$m&year=$y'>poprzedni dzień</a>";
  52. }elseif($dir == "next"){
  53. $dni = dni_mies($mouth, $year);
  54. if($mouth > date("n")+3 && $year == date("Y")){
  55. $link = "następny dzień";
  56. }elseif($mouth == date("n")+3 && $year == date("Y")){
  57. if($day+1 > $dni){
  58. $link = "następny dzień";
  59. }else{
  60. $link = "<a href='day.php?day=".($day+1)."&mouth=$mouth&year=$year'>następny dzień</a>";
  61. }
  62. }else{
  63. $dni = dni_mies($mouth, $year);
  64. if($day+1 > $dni){
  65. $d = 1;
  66. if($mouth+1 > 12){
  67. $m = 1;
  68. $y++;
  69. }else{
  70. $m++;
  71. }
  72. }else{
  73. $d++;
  74. }
  75. $link = "<a href='day.php?day=$d&mouth=$m&year=$y'>następny dzień</a>";
  76. }
  77. }
  78.  
  79. return $link;
  80. }
  81. ?>
  82. <html>
  83. <head>
  84. <meta http-equiv="content-type" content="text/xml; charset=utf-8" />
  85. <meta http-equiv="content-language" content="pl" />
  86. <style>
  87. .prev{
  88. background: #ccc;
  89. border-bottom: 2px solid #000;
  90. border-left: 2px solid #000;
  91. border-top: 2px solid #000;
  92. border-right: 1px solid #000;
  93. float: left;
  94. width: 150px;
  95. }
  96. .next{
  97. background: #ccc;
  98. border-bottom: 2px solid #000;
  99. border-left: 1px solid #000;
  100. border-top: 2px solid #000;
  101. border-right: 2px solid #000;
  102. float: left;
  103. width: 150px;
  104. }
  105.  
  106. .day{
  107. background: #ffe4a4;
  108. border-bottom: 2px solid #000;
  109. border-top: 2px solid #000;
  110. border-right: 1px solid #000;
  111. border-left: 2px solid #000;
  112. float: left;
  113. width: 150px;
  114. }
  115. .tee{
  116. width: 200px;
  117. border: 1px solid #000;
  118. }
  119. .hour{
  120. width: 50px;
  121. background: #ffe4a4;
  122. border: 1px solid #000;
  123. }
  124.  
  125. .block{
  126. background: #990000;
  127. }
  128.  
  129. .hour_block{
  130. width: 50px;
  131. background: #990000;
  132. border: 1px solid #000;
  133. }
  134.  
  135. .hours_hide{
  136. display: none;
  137. }
  138. .hours_show{
  139. display: block;
  140. }
  141. .select_hide{
  142. position: absolute;
  143. width: 70px;
  144. background: #ffe4a4;
  145. border: 1px solid #000;
  146. margin: -20px 0 0 50px;
  147. display: none;
  148. }
  149. .select_show{
  150. position: absolute;
  151. width: 70px;
  152. background: #ffe4a4;
  153. border: 1px solid #000;
  154. margin: -20px 0 0 50px;
  155. display: block;
  156. }
  157. .sector{
  158. float:left;
  159. }
  160. </style>
  161. <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  162. <script type="text/javascript">
  163. function show(){
  164. if($("div#hours1").hasClass("hours_hide")){
  165. $("div#hours1").show("slow");
  166. $('div#hours1').removeClass('hours_hide');
  167. $('div#hours1').addClass('hours_show');
  168. }else{
  169. $("div#hours1").hide("slow");
  170. $('div#hours1').removeClass('hours_show');
  171. $('div#hours1').addClass('hours_hide');
  172. }
  173. }
  174. function show2(id){
  175. if($("div#"+id).hasClass("hour_block")){}else{
  176. if($("div#"+id+"_child").hasClass("select_hide")){
  177. $("div#"+id+"_child").show("slow");
  178. $("div#"+id+"_child").removeClass('select_hide');
  179. $("div#"+id+"_child").addClass('select_show');
  180. }else{
  181. $("div#"+id+"_child").hide("slow");
  182. $("div#"+id+"_child").removeClass('select_show');
  183. $("div#"+id+"_child").addClass('select_hide');
  184. }
  185. }
  186. }
  187.  
  188. function show3(){
  189. if($("div#hours2").hasClass("hours_hide")){
  190.  
  191. $("div#hours2").show("slow");
  192. $('div#hours2').removeClass('hours_hide');
  193. $('div#hours2').addClass('hours_show');
  194.  
  195. }else{
  196. $("div#hours2").hide("slow");
  197. $('div#hours2').removeClass('hours_show');
  198. $('div#hours2').addClass('hours_hide');
  199.  
  200. }
  201. }
  202. function getIdElement(element){
  203. i=$(element).attr("id");
  204. return i;
  205. }
  206. </script>
  207. </head>
  208. <body>
  209. <div class="prev"><?=gen_link("back");?></div>
  210. <div class="day"><?=$day;?> <?=miesiac_pl($mouth);?></div>
  211. <div class="next"><?=gen_link("next");?></div>
  212. <br/><br/>
  213. <div class="sector">
  214. <div class="tee" id="tee1" onclick="show();">Tee1</div>
  215. <div class="hours_hide" id="hours1">
  216. <?
  217. $
  218. $i = 46;
  219. $m = 0;
  220. $h = 8;
  221. while($i < 92){
  222. $cell_color = ($m % 60 == 0 ? $h++ : NULL);
  223. if($h == 9)$addzero = 0;else $addzero = NULL;
  224. if($m == 0)$addzero2 = 0;else $addzero2 = NULL;
  225. ?>
  226. <div class="hour" onclick="show2(getIdElement(this));" id="<?=$i;?>">
  227. <?
  228. echo $addzero.$h.":".$addzero2.$m;
  229. ?><div class="select_hide" id="<?=$i;?>_child">klubowicz<br/>gość</div>
  230. </div>
  231. <?
  232. $m = $m+10;
  233. if($m == 60){
  234. $m = 0;
  235. }
  236. $i++;
  237. }
  238. ?>
  239. <div class="hour">09:00</div>
  240. <div class="hour block" id="100" onclick="show2(getIdElement(this));">09:10 <div class="select_hide" id="100_child">klubowicz<br/>gość</div></div>
  241. <div class="hour">09:20</div>
  242. <div class="hour">09:30</div>
  243. </div>
  244. </div>
  245. <div class="sector">
  246. <div class="tee" id="tee2" onclick="show3();">Tee10</div>
  247. <div class="hours_hide" id="hours2">
  248. <?
  249. $i = 0;
  250. $m = 0;
  251. $h = 8;
  252. while($i < 46){
  253. $cell_color = ($m % 60 == 0 ? $h++ : NULL);
  254. if($h == 9)$addzero = 0;else $addzero = NULL;
  255. if($m == 0)$addzero2 = 0;else $addzero2 = NULL;
  256. ?>
  257. <div class="hour" onclick="show2(getIdElement(this));" id="<?=$i;?>">
  258. <?
  259. echo $addzero.$h.":".$addzero2.$m;
  260. ?><div class="select_hide" id="<?=$i;?>_child">klubowicz<br/>gość</div>
  261. </div>
  262. <?
  263. $m = $m+10;
  264. if($m == 60){
  265. $m = 0;
  266. }
  267. $i++;
  268. }
  269. ?>
  270. <div class="hour">09:00</div>
  271. <div class="hour block" id="100" onclick="show2(getIdElement(this));">09:10 <div class="select_hide" id="100_child">klubowicz<br/>gość</div></div>
  272. <div class="hour">09:20</div>
  273. <div class="hour">09:30</div>
  274. </div>
  275. </div>
  276. </body>
  277. </html>



A problem jest taki, że mam w bazie zrobioną tabelę tak, że pobiera mi w taki sposób dane:


  1. $array['zamow_id][0]=1;
  2. $array['zamow_data][0]="4-4-2012";
  3. $array['zamow_czas][0]="16:30";
  4. $array['zamow_id][1]=2;
  5. $array['zamow_data][1]="4-4-2012";
  6. $array['zamow_czas][1]="16:30";


I chcę w pętli sprawdzać, czy na daną godzinę jest wpisany rekord w bazie. Oczywiście, na pierwszą myśl było wrzucenie zapytania do pętli, ale jeśli to zrobię będę musiał zapętlić 92 zapytania do bazy co za tym idzie, często będzie wywalać "over". Jak zoptymalizować kod, żeby wykonać 1 zapytanie a sprawdzać czy jest odpowiednik w bazie? Słyszałem o przeszukiwaniu tablicy wielowymiarowej poprzez jakieś funkcje ale nie wiem jak to się robi.
Tartut
Może pobierz wszystkie rekordy z tabeli (chociaż to nie jest zbyt optymalne gdy tabela ma bardzo dużo rekordów), a potem w pętli sprawdzaj datę. W poniżej przedstawiony sposób możesz przeszukać całą pobraną tabelę.
  1. $array['zamow_data][$i]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.