Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Zapytanie w zapytaniu ... jak?
phpamator
post
Post #1





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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 (IMG:style_emoticons/default/smile.gif)
Ale do rzeczy.
Na szczęście jak widze nie tylko ja mam podobne problemy (IMG:style_emoticons/default/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.

Ten post edytował PHPRexio 18.10.2016, 23:22:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
emstawicki
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


Wyświetl sobie przed drugim zapytaniem wartość zmiennej $query2 i zobaczysz w czym leży błąd.
Go to the top of the page
+Quote Post
phpamator
post
Post #3





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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 (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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?
Go to the top of the page
+Quote Post
phpamator
post
Post #5





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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
Go to the top of the page
+Quote Post
phpamator
post
Post #7





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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 (IMG:style_emoticons/default/smile.gif)


W końcu zwalczyłem ..... działa i pokazuje jak należy (IMG:style_emoticons/default/smile.gif)
tak wygląda mniej więcej tabelka (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
jak znam życie można to zrobić prościej (IMG:style_emoticons/default/smile.gif) (IMG:style_emoticons/default/questionmark.gif)


........ czy nie (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował PHPRexio 20.10.2016, 23:42:07
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 23:43