Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] wyswietla za duzo ...
Forum PHP.pl > Forum > PHP
blackneron
  1. <?php
  2. $sql= select a.id, a.xxx, a.yyy, a.zzz, a.rrr, b.id, b.data
  3. from tab1 AS a, tab2 AS b
  4. where a.id=b.id and b.data='$data'
  5. $query = mysql($query);
  6.  
  7. while($wiersz=mysql_fetch_array($query))
  8. {
  9. print "<p>XXX:".$wiersz['xxx']" | ";
  10.  
  11. $aqq="select * from tab2 where data='$data' and id=$wiersz[id]";
  12. $a=mysql_query($aqq);
  13.  
  14.  while($row=mysql_fetch_array($a))
  15.  {
  16. print " ".$row['godzina']." , </p>";
  17.  }
  18. }
  19. ?>


Problem jest taki, że wyświetla tyle xxx ile jest w bazie. A chcem aby mi wyswietlilo tylko raz same 'xxx' i dalej wartości z drugiego zapytania, czyli jak np. godzin mam 3 to wyświeltic ma: xxx | 11:00, 12:00, 14:00.
eS...
  1. <?php
  2. $aqq="select * from tab2 where data='$data' and id=$wiersz[id] LIMIT 3";
  3. ?>
Cienki1980
Cytat(eS... @ 13.01.2007, 01:17:59 ) *
  1. <?php
  2. $aqq="select * from tab2 where data='$data' and id=$wiersz[id] LIMIT 3";
  3. ?>

To rozwiązanie nic nie da w przypadku gdy będa np 4 godziny albo i więcej.

Musiałbyć przy każdym przejściu przez pętle główna WHILE sprawdzać jaką wartośc miało xxx w poprzednim przejściu. Jeżeli taka samą jak aktualnie pobrana wartość to jej nie wyświetlać, jeżeli inna to wyświetlić.
blackneron
zupełnie nie mam pomysłu jak to zrobić... koncepcja prosta ale coś cienko z wykonaniem
Cienki1980
Pisane na szybko i bez zbędnego sprawdzania, tak aby tylko pokazać koncepcje:

  1. <?php
  2. $sql= "select a.id, a.xxx, a.yyy, a.zzz, a.rrr, b.id, b.datafrom tab1 AS a, tab2 A
    S bwhere a.id=b.id and b.data='$data'"
    ;
  3. $query = mysql($query);
  4.  
  5. $old_wiersz=array();
  6.  
  7. while($wiersz=mysql_fetch_array($query))
  8. {
  9. /*porownujesz jak ma sie stary wiersz do nowego */
  10.  if(isset($wiersz['xxx']!=$old_wiersz['xxx']) 
  11. print "<p>XXX:".$wiersz['xxx']" | ";
  12.  $aqq="select * from tab2 where data='$data' and id=$wiersz[id]";
  13.  $a=mysql_query($aqq);
  14.  while($row=mysql_fetch_array($a))
  15.  {
  16. print " ".$row['godzina']." , </p>";
  17.  }
  18.  $old_wiersz=$wiersz; // przypisujesz wartość aktualnie czytanego wiersza
  19. }
  20. ?>
blackneron
nie działa, może jakieś inne pomysły ?
co to jest ten $old_wiersz, bo nie widze powodów jego wystąpienia.
Cienki1980
$old_wiersz to tablica w której przechowujesz ostatnio obrabiany rekord.

Tak jak pisałem to był tylko przykład pisany na szybko żeby pokazać koncepcje.

Co Ci nie działa?? Jakieś błędy questionmark.gif
blackneron
Looknij na to.
  1. <?php
  2. $sql= "select a.id, a.xxx, a.yyy, a.zzz, a.rrr, b.id, b.datafrom tab1 AS a, tab2 A
    S bwhere a.id=b.id and b.data='$data'"
    ;
  3. $query = mysql($query);
  4.  
  5.  $old_wiersz=array();
  6.  
  7. while($wiersz=mysql_fetch_array($query)) // błąd - syntax error, unexpected T_IS_NOT_EQUAL
  8.  {
  9. if(isset($wiersz['xxx']!=$old_wiersz['xxx']) 
  10. print "<p>XXX:".$wiersz['xxx']" | ";
  11. $aqq="select * from tab2 where data='$data' and id=$wiersz[id]";
  12. $a=mysql_query($aqq);
  13.  
  14.  while($row=mysql_fetch_array($a))
  15.  {
  16. print " ".$row[godzina]." ";
  17.  }
  18.  
  19.  
  20. {
  21. print "<p><a href="link.php?xxx=$wiersz[xxx]&id=$wiersz[id]&data=$data">Link</p>"; }
  22. print "<hr />";
  23.  }
  24.  $old_wiersz=$wiersz;
  25.  }
  26. ?>
Cienki1980
Na pewno jest błąd w zapytaniu przy where
Po drugie nie ma takiego czegoś jak mysql() a jest mysql_query().

Wiem, że ja to pisałem, ale również napisałem, że pisałem to szybko i bez sprawdzania żebyś tylko załapał klimat.
blackneron
zapytanie sql'owe jest spoko, tam w where poprawiłem bo była literówka. I też ten sam komunikat o błędzie.
Tu coś jest pokrzaczone - if(isset($wiersz['xxx']!=$old_wiersz['xxx'])

Error: unexpected T_IS_NOT_EQUAL, expecting ',' or ')' in
maryaan
przeciez brakuje drugiego nawiasu zamykajacego ')'

tu tez niezlego miksa zapodales
  1. <?php
  2. print "<p><a href="link.php?xxx=$wiersz[xxx]&id=$wiersz[id]&data=$data">Link</p>"; 
  3. ?>

nie lepiej tak
  1. <?php
  2. print '<p><a href="link.php?xxx='.$wiersz[xxx].'&id='.$wiersz[id].'&data='.$data.'">Link</p>';
  3. ?>


dziala jedno i drugie ale o ile latwiej teraz wylapac bledy

chyba ze u Ciebie nie ma drugiego backslasha to nie zadizlaa, tyle ukosnikow sie dodaje przy edycji ze nie wiem ktore sa ktore :]
Cienki1980
  1. <?php
  2. if($wiersz['xxx']!=$old_wiersz['xxx'])
  3. ?>


Tak być powinno.
blackneron
Cytat(Cienki1980 @ 18.01.2007, 23:59:45 ) *
  1. <?php
  2. if($wiersz['xxx']!=$old_wiersz['xxx'])
  3. ?>


Tak być powinno.



Po tej zmianie nie zrobi nic innego jak tylko wyświetli XXX. A mi chodz aby wyświetliło XXX | godzinki | Link .
A jak pod polem XXX nie będzie rzadnej godziny to poprostu nie wyświetli tego XXX.
Cienki1980
Patrząc po kolorowaniu kodu masz coś jeszcze nie tak w lini 22 ... gdzieś źle zamknięty "

po $data powinno być \" a nie samo "
blackneron
Tak sobie myślę, że chyba coś jest nie tak w pierwszym zapytaniu. Może jego modyfikacja rozwiąże problem.
Już sam nie wiem.
Zauważyłem, że wyświetla tyle razy w pętli XXX ile razy zostało wywołanych godzin w pętli:
  1. <?php
  2. while($row=mysql_fetch_array($a))
  3. {
  4. print " ".$row[godzina]." ";
  5. }
  6. ?>
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.