Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Zapytanie w zapytaniu ... jak?
Forum PHP.pl > Forum > Przedszkole
phpamator
Witajcie, to ja wasz stary phpamator!
Już chyba czas żeby zmienić na dobre phpamatora na coś nowego ale ... z uwagi na to, że nie radzę sobie chyba jednak pozostanę przy tym smile.gif
Ale do rzeczy.
Na szczęście jak widze nie tylko ja mam podobne problemy smile.gif
Chodzi o przykład poniżej:
w którym to usiłuję pobrać i pogrupować pewne wartości na podstawie aktualnie "obrabianego" rekordu a właściwie jednej z jego wartości.
  1. $output = '<table class="table tblList fourColTable" border="1" id="return"><tr><th>Visits</th><th>Page url</th><th>Flags</th><th>Go to</th></tr>';
  2. $query1 = "SELECT page, count(page) as cnt FROM `analytics` GROUP BY page";
  3. $query2 = "SELECT countryCode FROM `analytics` WHERE page = '.$page.' GROUP BY page,countryCode";
  4. $a = 1;
  5. $pages = mysql_query($query1);
  6. while($row = mysql_fetch_array($pages)){
  7. $str = $row['page'];
  8. $page = str_replace("http://www.fado.cox"," ",$str);
  9. $result = mysql_query($query2);
  10. foreach($result as $flag){
  11. if($flag){$flag = '<img src="../images/flags/16/'.strtolower($flag).'.png"/>';
  12. }
  13. $list .= $flag;
  14. $output .= '<tr><td>'.$row['cnt'].'</td><td>'.$page.'</td><td>'.$list.'</td><td class="cent"><a target="_new" href="'.$row['page'].'"><i class="fa fa-globe"></i>X</a></td></tr>';$a++;
  15. }
  16. $qutput .='</table>';
  17.  

Jak widać wykonując pierwsze query usiłuję wykonać kolejne, które to miałoby zebrać countryCode dla wskazanego url'a, zebrać do kupy, utworzyć zestaw obrazków który następnie miałby znaleźć się w jednej z kolumn tabeli.
ale jak to zwykle bywa coś namotałem i nie moge sobie poradzić, pokazują się owszem obrazki ale tylko wtedy gdy wyrzucę z zapytania drugiego "WHEN page ="
ale wtedy z kolei następuje zinkrementowanie i mam setki obrazków w każdym rzędzie a powinno odczytywać dla danego url i grupować co w efekcie powinno pokazać dwa, trzy obrazki na każdy url.
emstawicki
Wyświetl sobie przed drugim zapytaniem wartość zmiennej $query2 i zobaczysz w czym leży błąd.
phpamator
Robiłem to już wielokrotnie i nie pomogło,
  1. $output = '<table class="table tblList fourColTable" border="1" id="return"><tr><th>Visits</th><th>Page url</th><th>Flags</th><th>Go to</th></tr>';
  2. $query1 = "SELECT page, count(page) as cnt FROM `analytics` GROUP BY page";
  3. //$query2 = "SELECT countryCode FROM `analytics`";// WHERE page = '.$page.' GROUP BY page,countryCode";
  4. $pages = mysql_query($query1);
  5. while($row = mysql_fetch_array($pages)){
  6. $flag = '';
  7. $str = $row['page'];
  8. $page = str_replace("http://www.fado.cox"," ",$str);
  9. $query2 = "SELECT countryCode FROM `analytics` WHERE page = '".$row[page]."' GROUP BY countryCode";
  10. echo $query2;
  11. $result = mysql_query($query2);
  12. while($flag = mysql_fetch_array($result)){
  13. if($flag){
  14. $flag = '<img src="../images/flags/16/'.strtolower($flag).'.png"/>';
  15. }
  16. $list .= $flag;
  17. }
  18.  
  19.  
  20. $output .= '<tr><td>'.$row['cnt'].'</td><td>'.$page.'</td><td>'.$list.'</td><td class="cent"><a target="_new" href="'.$row['page'].'"><i class="fa fa-globe"></i>X</a></td></tr>';
  21. }
  22. $qutput .='</table>';
  23. echo $output;

W najlepszym wypadku dostaję liste ale w dalszym ciągu jest źle sad.gif
trueblue
Podstawiasz $row['page'] do zapytania, choć chyba chciałeś $page.

Twój skrypt można zastąpić jednym zapytaniem SQL. Czy dla danego page masz kilka countryCode czy jeden?
phpamator
Może być kilka, ponieważ tabela to lista odwiedzin, page name może się powtarzać wielokrotnie a co za tym idzie countryCode może być za każdym razem inny.
w pierwszym zapytaniu buduję listę i zliczam "page" w zapytaniu drugin zliczam występowanie countryCode'ów i pakuję do zmiennej jako linki do obrazków ale coś nie bardzo działa.
zobacz tu :
http://www.impressnet.co.uk/soopra/public/test.php
trueblue
Nie wiem czy się dobrze zrozumieliśmy. Miałem na myśli sytuację po grupowaniu po page. Czyli czy po takim grupowaniu (pierwsze zapytanie) masz kilka countryCode dla jednego page.

Jeśli tak, to:

  1. SELECT page, COUNT(page) AS cnt,GROUP_CONCAT(countryCode) AS flags FROM `analytics` GROUP BY page


albo (tu masz licznik względem page i countryCode):

  1. SELECT page, COUNT(page) AS cnt,countryCode FROM `analytics` GROUP BY page,countryCode
phpamator
Czyli według twojego zapytania numer 1 powinienem dostać policzone i pogrupowane
np:

23 /jakas strona/ kody krajów

?
Spróbuję za chwilę.

Dzięki za ainteresowanie, trochę jakby zaczynam pojmować te zawiłości zapytań chociaż w dalszym ciągu nie działa mi to jak chciałem ale ... poczyniłem krok do przodu.
Po kilku próbach działa z pierwszym query, jest jednak zasadniczy problem, dostaję w jego wyniku piękny string GB,GB,GB,US,IN,GB,US,GB .... itd itd, jak teraz z tego zrobić np kolejną listę albo lepiej array z którego np będę mógł zliczyć i podczepić do tego obrazek który będzie reprezentował dany kraj ... jeden zamiast kilku bądź kilkunastu smile.gif


W końcu zwalczyłem ..... działa i pokazuje jak należy smile.gif
tak wygląda mniej więcej tabelka wink.gif
http://www.impressnet.co.uk/soopra/public/backup.php
  1. require_once('../config/config.php');
  2. $output = '<table class="table tblList fourColTable" id="return"><tr><th>Page url</th><th>Visits</th><th>Countries</th><th> Link</th></tr>';
  3. $query = "SELECT page, COUNT(page) AS cnt,GROUP_CONCAT(countryCode) AS flags FROM `analytics` GROUP BY page";// dziękuję "trueblue"
  4. $results = mysql_query($query);
  5. $fl = [];
  6. $flag = [];
  7. $final = [];
  8. while($row = mysql_fetch_array($results)){
  9. $page = $row['page'];
  10. $cnt = $row['cnt'];
  11. $flags = explode(',',$row['flags']);
  12. foreach($flags as $flag){
  13. if(!in_array($flag,$fl)){
  14. $final = array_push($fl, $flag);
  15. }
  16. }
  17. foreach($fl as $f){
  18. if($f){
  19. $fin .= '<img src="../images/flags/16/'.strtolower($f).'.png" alt="From '.$f.'"/>';
  20. }
  21. }
  22. $fl = [];
  23. $cc = $fin;
  24. $str = $row['page'];
  25. $page = str_replace("http://www.mayo.cox/"," ",$str);
  26. $output .= '<tr><td>'.$page.'</td><td>'.$cnt.'</td><td align="left" class="cent">'.$cc.'</td><td><a target="_new" href="'.$page.'"><i class="fa fa-globe"> Link</i></a></td></tr>';
  27. $fin = '';
  28. }
  29. $qutput .='</table>';
  30. echo $output;

Jeśli komuś chciało by się to lekko usprawnić ..... byłbym zobowiązany smile.gif
jak znam życie można to zrobić prościej smile.gifquestionmark.gif


........ czy nie questionmark.gifquestionmark.gif
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.