Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] zapytanie do dwóch tabel
Forum PHP.pl > Forum > PHP
Stron: 1, 2
Blajo
Mam następujący fragment kodu:

  1. <?php
  2. $q = "SELECT * FROM slowo WHERE id_domena='$id'"; 
  3. $r = mysql_query($q)
  4. or die("Query failed");
  5.  
  6. $i = 1;
  7. while ($ro = mysql_fetch_array($r)) {
  8.  
  9.  
  10. echo "
  11. <tr>
  12. <td class="zawartosc">$i</td>
  13. <td class="zawartosc">" . $ro["slowo"] ."</td>
  14. <td class="zawartosc">
  15. <table style="width: 120px; align: center;">
  16. <tr>
  17. <td style="width: 40px; text-align: center;"><b>L1</b></td>
  18. <td style="width: 40px; text-align: center;"><b>L2</b></td>
  19. <td style="width: 40px; text-align: center;"><b>L3</b></td>
  20. </tr>
  21. </table>
  22. </td>
  23. <td class="zawartoscsr">
  24. <table style="width: 120px; align: center;">
  25.  
  26. <tr>
  27. <td style="width: 40px; text-align: center;"><b>1</b></td>
  28. <td style="width: 40px; text-align: center;"><b>1</b></td>
  29. <td style="width: 40px; text-align: center;"><b>1</b></td>
  30. </tr>
  31. </table>
  32. </td>
  33. <td class="zawartoscsr">4,57</td>
  34. <td class="zawartoscsr">historia</td>
  35. <td class="zawartoscsr">8-12-2006</td>
  36. <td class="zawartoscsr">" . $ro["data_dodania"] ."</td>
  37. <td class="zawartoscsr">ble</td>
  38. </tr>";
  39. $i++;
  40. }
  41. ?>


I teraz mam pytanie: jak w miejscu L1, L2 i L3 umieścić dane, które są przechowywane w innej tabeli bazy danych?

Coś takiego:

1. słowo L11 L21 L31
2. słowo L12 L22 L32
3. słowo L13 L23 L33
itd.

Czyli do każdego słowa inne dane.
Struktura tabeli, z której dane chcę wyciągnąć jest następująca:

  1. CREATE TABLE `po` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_sk` varchar(11) NOT NULL DEFAULT '',
  4. `g` varchar(5) NOT NULL DEFAULT '',
  5. `o` varchar(5) NOT NULL DEFAULT '',
  6. `w` varchar(5) NOT NULL DEFAULT '',
  7. `data` date NOT NULL DEFAULT '0000-00-00',
  8. PRIMARY KEY (`id`)
  9. ) TYPE=MyISAM AUTO_INCREMENT=7 ;


Żeby jeszcze było "trudniej" potrzebuję wyciągnąć i wyświetlić tylko jedną, najmłodszą informacje dla danego id_sk.

Ma ktoś jakiś pomysł?
wipo
Np JOIN albo LEFT JOIN
Blajo
Ciężko mi to idzie...

Mam takie zapytanie:

  1. <?php
  2. $qp = "SELECT * FROM po WHERE id='$id'"; 
  3. $rp = mysql_query($qp)
  4. or die("Query failed2");
  5. ?>


i przy wyświetlanych słowach oczywiście mi się pokazują po słów, które mają w bazie id=1

jak skonstruować pętle (może zagnieżdżona?) i zapytanie, by wyświetlało tak:

słowo_1 Lsłowo_1 gdzie id słowa = 3 Lsłowo_2 gdzie id słowa = 3 Lsłowo_3 gdzie id słowa = 3
słowo_2 Lsłowo_1 gdzie id słowa = 4 Lsłowo_2 gdzie id słowa = 4 Lsłowo_3 gdzie id słowa = 4
słowo_2 Lsłowo_1 gdzie id słowa = 12 Lsłowo_2 gdzie id słowa = 12 Lsłowo_3 gdzie id słowa = 12

pomóżcie prosze...
wipo
Ogólny schemat na początek
Kod
<?php
$wykonaj=mysql_query("zapytanie do sql");
while($wynik=mysql_fetch_array($wykonaj)){
    print $wynik['pole1']." /// ".$wynik['pole2']." ///".$wynik[4]."<br>";
}
?>
Blajo
No to mam taką pętelke:

  1. <?php
  2. while ($ro = mysql_fetch_array($r)) {
  3. echo "
  4. <tr>
  5. <td class="zawartosc">$i</td>
  6. <td class="zawartosc">" . $ro["slowo_kluczowe"] ."</td>
  7. <td class="zawartosc">
  8. <table style="width: 120px; align: center;">
  9. <tr>
  10. <td style="width: 40px; text-align: center;"><img src="icon_google.gif"></td>
  11. <td style="width: 40px; text-align: center;"><img src="onet.ico"></td>
  12. <td style="width: 40px; text-align: center;"><img src="icon_msn.gif"></td>
  13. </tr>
  14.  
  15. <tr>
  16. <td style="width: 40px; text-align: center;"><b>" . $rpo["google"] ."</b></td>
  17. <td style="width: 40px; text-align: center;"><b>" . $rpo["onet"] ."</b></td>
  18. <td style="width: 40px; text-align: center;"><b>" . $rpo["wp"] ."</b></td>
  19. </tr>
  20. </table>
  21. </td>
  22. <td class="zawartoscsr">
  23. <table style="width: 120px; align: center;">
  24. <tr>
  25. <td style="width: 40px; text-align: center;"><img src="icon_google.gif"></td>
  26. <td style="width: 40px; text-align: center;"><img src="onet.ico"></td>
  27. <td style="width: 40px; text-align: center;"><img src="icon_msn.gif"></td>
  28. </tr>
  29. <tr>
  30. <td style="width: 40px; text-align: center;"><b>1</b></td>
  31. <td style="width: 40px; text-align: center;"><b>1</b></td>
  32. <td style="width: 40px; text-align: center;"><b>1</b></td>
  33. </tr>
  34. </table>
  35. </td>
  36. <td class="zawartoscsr">4,57</td>
  37. <td class="zawartoscsr">historia</td>
  38. <td class="zawartoscsr">" . $rpo["data"] ."</td>
  39. <td class="zawartoscsr">" . $ro["data_dodania"] ."</td>
  40. <td class="zawartoscsr"><a href="pozycje.php?id={$ro['id']}">dodaj</a><br /><a href="akcja.php?a=delsk&amp;id={$ro['id']}">usuń</a></td>
  41. </tr>";
  42. $i++;
  43. }
  44. echo "</table>";
  45. ?>



No i mój problem polega na tym, że w tych pogrubionych miejscach muszę wstawić cyferki równe id_sk z drugiej tabeli w bazie danych. Jak to wykonać?

coś się nie pogrubiło - chodzi o te miejsca: <b>" . $rpo["google"] ."</b>
wipo
A pokaż jak wygląda tabela jedna i druga i czym są połączone
Blajo
Tabela 1:

  1. CREATE TABLE `pozycje` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_sk` varchar(11) NOT NULL DEFAULT '',
  4. `google` varchar(5) NOT NULL DEFAULT '',
  5. `onet` varchar(5) NOT NULL DEFAULT '',
  6. `wp` varchar(5) NOT NULL DEFAULT '',
  7. `data` date NOT NULL DEFAULT '0000-00-00',
  8. PRIMARY KEY (`id`)
  9. ) TYPE=MyISAM AUTO_INCREMENT=7 ;


Tabela 2:

  1. CREATE TABLE `slowo_kluczowe` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_domena` varchar(11) NOT NULL DEFAULT '',
  4. `slowo_kluczowe` varchar(100) NOT NULL DEFAULT '',
  5. `data_dodania` date NOT NULL DEFAULT '0000-00-00',
  6. PRIMARY KEY (`id`)
  7. ) TYPE=MyISAM AUTO_INCREMENT=47 ;


Tabela 2 zawiera słowa kluczowe, Tabela 1 pozycje tych słów. Do Tabeli 1 wpisywane jest id słowa kluczowego.
wipo
Będę strzelał bo nie bardzo zrozumiałem opis.
  1. <?php
  2. mysql_query("select * from pozycje p join slowa_kluczowe s on s.id=p.id");
  3. ?>

Zobacz czy dobrze to powiązałem
Blajo
  1. $qp = "SELECT * FROM pozycje p join slowa_kluczowe s on s.id=p.id";
  2. $rp = mysql_query($qp) OR die("Query failed2");


wyświetla błąd "Query failed2"

jeszcze raz opisze problem.
mam pętelke, która mi wypisuje dane: słowa kluczowe z tabeli slowo_kluczowe. Obok tych słów kluczowych chcę wyświetlić ostatnią wartość liczbową z tabeli pozycje, w której wpisane jest id słowa kluczowego.
Dla każdego wiersza mają się wyświetlać inne wartości, bo w każdym nowy wierszu jest inne słowo kluczowe z innym ID.
wipo
Napisz
  1. <?php
  2. ?>

i się dowiesz czymu masz ten komunikat
Blajo
Something is wrong in your syntax obok 'on s.id=p.id' w linii 1

ehhh już się w tym pogubiłem...
wipo
A wrzuć to zapytanie do phpmyadmin może on coś Ci podpowie bo ja błędu nie widzę
Blajo
  1. zapytanie SQL: Dokumentacja
  2.  
  3. SELECT *
  4. FROM pozycje p
  5. JOIN slowa_kluczowe s ON s.id = p.id
  6. LIMIT 0, 30
  7.  
  8. MySQL zwrócił komunikat: Dokumentacja
  9. #1064 - Something is wrong in your syntax obok 'on s.id=p.id LIMIT 0, 30' w linii 1
wipo
A jakiego masz sql-a
Blajo
MySQL 3.23.32
wipo
To chyba dla tego join-ów nie możesz obsłużyć.
Proponuje zrobić update to wersji 4.4 lub 5
Blajo
no spoko, ale nie serwerze nie zrobie update'a

więc jak mam to zrobić inaczej?
wipo
Hmmm to możesz spróbować tak
  1. SELECT *
  2. FROM pozycje p, slowa_kluczowe s WHERE s.id = p.id
Sabistik
nie to żeby ale masz literówkę w zapytaniu ;p 'slowa_kluczowe '
Blajo
  1. $qp = "SELECT * FROM pozycje p, slowo_kluczowe s where s.id = p.id";
  2. $rp = mysql_query($qp) OR die(mysql_error());


żadnego błędu, ale cyferek też nie wyświetla.
wipo
a zrobiłeś
  1. <?php
  2. ?>
i takie tam?
Czy dałeś samo mysql_query i jesteś zadowolony ?
Blajo
  1. <?php
  2.  
  3.  
  4.  
  5. require("connect.php");
  6.  
  7. $link = mysql_connect("$mysql_host", "$mysql_user", "$mysql_pass")
  8.  
  9. or die("Could not connect");
  10.  
  11.  
  12.  
  13. mysql_select_db("$mysql_db")
  14.  
  15. or die("Could not select database");
  16.  
  17.  
  18.  
  19. $a = trim($_GET['a']);
  20.  
  21. $id = trim($_GET['id']);
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28. $query = "SELECT * FROM domena WHERE id='$id'";
  29. $result = mysql_query($query)
  30. or die("Query failed");
  31.  
  32. $q = "SELECT * FROM slowo_kluczowe WHERE id_domena='$id'"; 
  33. $r = mysql_query($q)
  34. or die("Query failed");
  35.  
  36.  
  37. $qp = "SELECT * FROM pozycje p, slowo_kluczowe s where s.id = p.id";
  38. $rp = mysql_query($qp) or die(mysql_error()); 
  39.  
  40. // mysql_query("SELECT * FROM pozycje WHERE id='5'");
  41.  
  42.  
  43.  
  44. // tabelka dodawanie słowa kluczowego
  45.  
  46. echo("<br /><table style=" border: 0px; margin: 0px auto 0px auto; width: 950px; background: #fafafa;"><tr><td class="tytul" colspan="2">Dodaj słowo kluczowe</td></tr>");
  47. echo("<tr><td colspan="2">
  48. <form method="POST" action="dodaj_klucz.php">
  49. <input type="hidden" name="id" value="$id">
  50. <label for="slowo_kluczowe" style="display: inline-block;">
  51. Słowo kluczowe: </label><input type="text" size="50" name="slowo_kluczowe"><input type="submit" value="dodaj"></td></tr>");
  52. echo("</table><br />");
  53.  
  54.  
  55.  
  56.  
  57.  
  58. //tabelka wyświetlanie danych domen
  59. $row = mysql_fetch_array($result);
  60. echo("<table style=" border: 0px; margin: 0px auto 0px auto; width: 950px; background: #fafafa;"><tr><td class="tytul" colspan="9">". $row["nazwa"] ."</td></tr>");
  61.  
  62. echo 
  63. "
  64. <tr>
  65. <td class="podtytul" width="30">id</td>
  66. <td class="podtytul" width="160">słowo kluczowe</td>
  67. <td class="podtytul" width="125">aktualna pozycja</td>
  68. <td class="podtytul" width="125">średnia pozycja</td>
  69. <td class="podtytul" width="70">średnia</td>
  70. <td class="podtytul" width="80">więcej</td>
  71. <td class="podtytul" width="100">aktualizacja</td>
  72. <td class="podtytul" width="100">dodano</td>
  73. <td class="podtytul" width="70">akcja</td>
  74. </tr>";
  75.  
  76. // licznik
  77. $i = 1;
  78.  
  79. // pozycje 
  80. $rpo = mysql_fetch_array($rp);
  81.  
  82.  
  83. while ($ro = mysql_fetch_array($r)) {
  84. echo "
  85. <tr>
  86. <td class="zawartosc">$i</td>
  87. <td class="zawartosc">" . $ro["slowo_kluczowe"] ."</td>
  88. <td class="zawartosc">
  89. <table style="width: 120px; align: center;">
  90. <tr>
  91. <td style="width: 40px; text-align: center;"><img src="icon_google.gif"></td>
  92. <td style="width: 40px; text-align: center;"><img src="onet.ico"></td>
  93. <td style="width: 40px; text-align: center;"><img src="icon_msn.gif"></td>
  94. </tr>
  95.  
  96. <tr>
  97. <td style="width: 40px; text-align: center;"><b>" . $rpo["google"] ."</b></td>
  98. <td style="width: 40px; text-align: center;"><b>" . $rpo["onet"] ."</b></td>
  99. <td style="width: 40px; text-align: center;"><b>" . $rpo["wp"] ."</b></td>
  100. </tr>
  101. </table>
  102. </td>
  103. <td class="zawartoscsr">
  104. <table style="width: 120px; align: center;">
  105. <tr>
  106. <td style="width: 40px; text-align: center;"><img src="icon_google.gif"></td>
  107. <td style="width: 40px; text-align: center;"><img src="onet.ico"></td>
  108. <td style="width: 40px; text-align: center;"><img src="icon_msn.gif"></td>
  109. </tr>
  110. <tr>
  111. <td style="width: 40px; text-align: center;"><b>1</b></td>
  112. <td style="width: 40px; text-align: center;"><b>1</b></td>
  113. <td style="width: 40px; text-align: center;"><b>1</b></td>
  114. </tr>
  115. </table>
  116. </td>
  117. <td class="zawartoscsr">4,57</td>
  118. <td class="zawartoscsr">historia</td>
  119. <td class="zawartoscsr">" . $rpo["data"] ."</td>
  120. <td class="zawartoscsr">" . $ro["data_dodania"] ."</td>
  121. <td class="zawartoscsr"><a href="pozycje.php?id={$ro['id']}">dodaj</a><br /><a href="akcja.php?a=delsk&amp;id={$ro['id']}">usuń</a></td>
  122. </tr>";
  123. $i++;
  124. }
  125. echo "</table>";
  126.  
  127.  
  128.  
  129.  
  130. mysql_close($link);
  131.  
  132.  
  133.  
  134.  
  135.  
  136. //<td>[dodaj pozycje] [<a href="dodaj_klucz2.php?id=". $row["id"] ."">dodaj słowo kluczowe</a>]</td>
  137.  
  138. ?>



Takie to sobie mam.
wipo
  1. <?php
  2. $query = "SELECT * FROM domena WHERE id='$id'";
  3. $result = mysql_query($query)
  4. or die("Query failed");
  5.  
  6. $q = "SELECT * FROM slowo_kluczowe WHERE id_domena='$id'"; 
  7. $r = mysql_query($q)
  8. or die("Query failed");
  9.  
  10. // te dwa zapytania u góry są zgrupowane w tym u dołu
  11.  
  12. $qp = "SELECT * FROM pozycje p, slowo_kluczowe s where s.id = p.id";
  13. $rp = mysql_query($qp) or die(mysql_error());
  14. ?>
Blajo
no to tak przecież mam.
o co chodzi?
wipo
3 razy pytasz się bazy o to samo
Zrób sobie jedno porządne zapytanie
Blajo
nic mi nie wyświetla to wspólne zapytanie:

  1. $qp = "SELECT * FROM pozycje p, slowo_kluczowe s where s.id = p.id";
  2. $rp = mysql_query($qp) OR die(mysql_error());


więc jak ma wyglądać to zapytanie i ta tabela wyświetlająca słowo kluczowe i ostatnią zapisaną (z najmłodszą datą) pozycje tego słowa?
wipo
Ale pokaż tabelki jakie masz w bazie i jak są połączone.
Bo ja moge dalej strzelać w ciemno i dalej nie będzie działać
Blajo
tabelki w bazie danych mam takie:

  1. CREATE TABLE `domena` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nazwa` varchar(100) NOT NULL DEFAULT '',
  4. `data_dodania` date NOT NULL DEFAULT '0000-00-00',
  5. PRIMARY KEY (`id`)
  6. ) TYPE=MyISAM AUTO_INCREMENT=70 ;


  1. CREATE TABLE `pozycje` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_sk` varchar(11) NOT NULL DEFAULT '',
  4. `google` varchar(5) NOT NULL DEFAULT '',
  5. `onet` varchar(5) NOT NULL DEFAULT '',
  6. `wp` varchar(5) NOT NULL DEFAULT '',
  7. `data` date NOT NULL DEFAULT '0000-00-00',
  8. PRIMARY KEY (`id`)
  9. ) TYPE=MyISAM AUTO_INCREMENT=7 ;


  1. CREATE TABLE `slowo_kluczowe` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_domena` varchar(11) NOT NULL DEFAULT '',
  4. `slowo_kluczowe` varchar(100) NOT NULL DEFAULT '',
  5. `data_dodania` date NOT NULL DEFAULT '0000-00-00',
  6. PRIMARY KEY (`id`)
  7. ) TYPE=MyISAM AUTO_INCREMENT=47 ;




1. do tabelki 'domena' wpisywane są dane domeny
2. do tabelki 'slowo_kluczowe' wpisywane są słowa kluczowe z numerem id domeny
3. do tabelki 'pozycje' wpisywane są pozycje słów, wraz z numere id słowa kluczowego

Mam listę domen:
1. www.domena1.pl
2. www.domena2.pl
3. www.domena3.pl

Chcę by po kliknięciu na jakąś domenę pokazywało się:
www.domena1.pl (//id z tabeli 'domena'=1)
1. słowokluczowe1 (// id_domena z tabeli 'slowo_kluczowe'=1, id z tabeli 'slowo_kluczowe'=1) 1 2 2
2. słowokluczowe2 (// id_domena z tabeli 'slowo_kluczowe'=1, id z tabeli 'slowo_kluczowe'=2) 4 5 9
3. słowokluczowe3 (// id_domena z tabeli 'slowo_kluczowe'=1, id z tabeli 'slowo_kluczowe'=3) 4 4 4

// te cyfry na końcu to są ostnie zapisane liczby (z najmłodszą datą) wyciągane z tabeli 'pozycje'
// w slowokluczowe1 liczby mają mieć id_sk z tabeli 'slowo_kluczowe' równe 1
// w slowokluczowe2 liczby mają mieć id_sk z tabeli 'slowo_kluczowe' równe 2
// w slowokluczowe3 liczby mają mieć id_sk z tabeli 'slowo_kluczowe' równe 3

Mam nadzieję, że teraz już bardzo jasno przedstawiłem problem i zostanie od szybko rozwiązany.
wipo
No coś takiego zobacz
  1. SELECT d.nazwa, s.slowo_kluczowe, p.* FROM domena d JOIN slowo_kluczowe k ON k.id_domena=d.id JOIN pozycje p ON p.id_sk=k.id ORDER BY s.data_dodania DESC
Blajo
Something is wrong in your syntax obok 'on k.id_domena=d.id join pozycje p on p.id_sk=k.id order by s.da' w linii 1
wipo
literówka była

  1. SELECT d.nazwa, k.slowo_kluczowe, p. *
  2. FROM domena d
  3. JOIN slowo_kluczowe k ON k.id_domena = d.id
  4. JOIN pozycje p ON p.id_sk = k.id
  5. ORDER BY k.data_dodania DESC
Blajo
Czyli cały mój kod wygląda teraz tak:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>
  2.  
  3. <head>
  4. <meta http-equiv="Content-type" content="text/html; charset=windows-1250">
  5. <link rel="stylesheet" type="text/css" media="all" href="style.css" />
  6. <title>Poz</title>
  7. </head>
  8.  
  9. <body>
  10.  
  11.  
  12. <?php
  13.  
  14.  
  15. require("connect.php");
  16.  
  17. $link = mysql_connect("$mysql_host", "$mysql_user", "$mysql_pass")
  18.  
  19. or die("Could not connect");
  20.  
  21.  
  22.  
  23. mysql_select_db("$mysql_db")
  24.  
  25. or die("Could not select database");
  26.  
  27.  
  28.  
  29. $a = trim($_GET['a']);
  30. $id = trim($_GET['id']);
  31.  
  32.  
  33.  
  34.  
  35. $query = "SELECT * FROM domena WHERE id='$id'";
  36. $result = mysql_query($query)
  37. or die("Query failed");
  38.  
  39.  
  40.  
  41. $qp = "
  42. SELECT d.nazwa, k.slowo_kluczowe, p. *
  43. FROM domena d
  44. JOIN slowo_kluczowe k ON k.id_domena = d.id
  45. JOIN pozycje p ON p.id_sk = k.id
  46. ORDER BY k.data_dodania DESC 
  47. ";
  48. $rp = mysql_query($qp) or die(mysql_error()); 
  49.  
  50.  
  51. // tabelka dodawanie słowa kluczowego
  52.  
  53. echo("<br /><table style=" border: 0px; margin: 0px auto 0px auto; width: 950px; background: #fafafa;"><tr><td class="tytul" colspan="2">Dodaj słowo kluczowe</td></tr>");
  54. echo("<tr><td colspan="2">
  55. <form method="POST" action="dodaj_klucz.php">
  56. <input type="hidden" name="id" value="$id">
  57. <label for="slowo_kluczowe" style="display: inline-block;">
  58. Słowo kluczowe: </label><input type="text" size="50" name="slowo_kluczowe"><input type="submit" value="dodaj"></td></tr>");
  59. echo("</table><br />");
  60.  
  61.  
  62.  
  63. //tabelka wyświetlanie danych domen
  64. $row = mysql_fetch_array($result);
  65. echo("<table style=" border: 0px; margin: 0px auto 0px auto; width: 950px; background: #fafafa;"><tr><td class="tytul" colspan="9">". $row["nazwa"] ."</td></tr>");
  66.  
  67. echo 
  68. "
  69. <tr>
  70. <td class="podtytul" width="30">id</td>
  71. <td class="podtytul" width="160">słowo kluczowe</td>
  72. <td class="podtytul" width="125">aktualna pozycja</td>
  73. <td class="podtytul" width="125">średnia pozycja</td>
  74. <td class="podtytul" width="70">średnia</td>
  75. <td class="podtytul" width="80">więcej</td>
  76. <td class="podtytul" width="100">aktualizacja</td>
  77. <td class="podtytul" width="100">dodano</td>
  78. <td class="podtytul" width="70">akcja</td>
  79. </tr>";
  80.  
  81. // licznik
  82. $i = 1;
  83.  
  84. // pozycje 
  85. $rpo = mysql_fetch_array($rp);
  86.  
  87.  
  88. while ($ro = mysql_fetch_array($rp)) {
  89. echo "
  90. <tr>
  91. <td class="zawartosc">$i</td>
  92. <td class="zawartosc">" . $ro["slowo_kluczowe"] ."</td>
  93. <td class="zawartosc">
  94. <table style="width: 120px; align: center;">
  95. <tr>
  96. <td style="width: 40px; text-align: center;"><img src="icon_google.gif"></td>
  97. <td style="width: 40px; text-align: center;"><img src="onet.ico"></td>
  98. <td style="width: 40px; text-align: center;"><img src="icon_msn.gif"></td>
  99. </tr>
  100.  
  101. <tr>
  102. <td style="width: 40px; text-align: center;"><b>" . $ro["google"] ."</b></td>
  103. <td style="width: 40px; text-align: center;"><b>" . $ro["onet"] ."</b></td>
  104. <td style="width: 40px; text-align: center;"><b>" . $ro["wp"] ."</b></td>
  105. </tr>
  106. </table>
  107. </td>
  108. <td class="zawartoscsr">
  109. <table style="width: 120px; align: center;">
  110. <tr>
  111. <td style="width: 40px; text-align: center;"><img src="icon_google.gif"></td>
  112. <td style="width: 40px; text-align: center;"><img src="onet.ico"></td>
  113. <td style="width: 40px; text-align: center;"><img src="icon_msn.gif"></td>
  114. </tr>
  115. <tr>
  116. <td style="width: 40px; text-align: center;"><b>1</b></td>
  117. <td style="width: 40px; text-align: center;"><b>1</b></td>
  118. <td style="width: 40px; text-align: center;"><b>1</b></td>
  119. </tr>
  120. </table>
  121. </td>
  122. <td class="zawartoscsr">4,57</td>
  123. <td class="zawartoscsr">historia</td>
  124. <td class="zawartoscsr">" . $ro["data"] ."</td>
  125. <td class="zawartoscsr">" . $ro["data_dodania"] ."</td>
  126. <td class="zawartoscsr"><a href="pozycje.php?id={$ro['id']}">dodaj</a><br /><a href="akcja.php?a=delsk&amp;id={$ro['id']}">usuń</a></td>
  127. </tr>";
  128. $i++;
  129. }
  130. echo "</table>";
  131.  
  132.  
  133.  
  134.  
  135. mysql_close($link);
  136.  
  137. ?>
  138.  
  139. </body>
  140. </html>


i wyświetla błąd w zapytaniu w linii 4:

Something is wrong in your syntax obok 'ON k.id_domena = d.id JOIN pozycje p ON p.id_sk = k.id ORDER B' w linii 4

To może zadam tak pytanie:

  1. $qp = "SELECT slowo_kluczowe, data_dodania FROM slowo_kluczowe WHERE id_domena = '$id'";
  2. $rp = mysql_query($qp) OR die(mysql_error());


To mi wyświetla listę słów tak jak chce.
Jak obok tego wyświetlić ich pozycje z drugiej tabeli gdzie id pozycji == id słowa kluczowego.
wipo
A wykonaj to zapytanie np w phpmyadmin i zobacz wyniki
Może po prostu złe dane próbujesz wyświetlić
Blajo
MySQL zwrócił komunikat: Dokumentacja
#1064 - Something is wrong in your syntax obok 'ON k.id_domena = d.id
JOIN pozycje p ON p.id_sk = k.id
ORDER B' w linii 3

w PHPMyAdmin też się wysypuje...
wipo
To której wersji php i sql ty używasz bo u mnie to zapytania działa bo sprawdziłem
Blajo
phpMyAdmin 2.6.0-pl2
MySQL 3.23.58


nie mam możliwości aktualizacji MySQL na serwerze

Takie zapytanie mi wyświetla, ale nie tak jak chce...
$qp = "SELECT s.slowo_kluczowe, s.data_dodania, p.google, p.onet, p.wp FROM slowo_kluczowe as s, pozycje as p WHERE id_domena = $id";
$rp = mysql_query($qp) or die(mysql_error());
wipo
Zrób aktualizację bazy danych i będzie działać.
W tej archaicznej wersji nie ma obsługi JOIN czyli łączenia tabel
Blajo
Nie mam możliwości zrobienia aktualizacji bazy danych, bo to nie mój serwer.

Takie zapytanie:

  1. $qp = "SELECT s.slowo_kluczowe, s.data_dodania, p.google, p.onet, p.wp FROM slowo_kluczowe as s, pozycje as p WHERE s.id_domena = $id AND p.id_sk=";
  2. $rp = mysql_query($qp) OR die(mysql_error());


Wyświetla mi prawie tak jak chce, co mam dać po p.id_sk= żeby było to równe słowu kluczowemu wpisane w tym samym <tr></tr> ?
wipo
prawdopodobnie d.id
Blajo
Dobra już robi to co chce, tylko takie zapytanie:

  1. $qp = "SELECT s.slowo_kluczowe, s.data_dodania, p.google, p.onet, p.wp FROM slowo_kluczowe as s, pozycje as p WHERE s.id_domena = $id AND p.id_sk=s.id";
  2. $rp = mysql_query($qp) OR die(mysql_error());


wyświetla mi słowa kluczowe, które mają wpis w tabeli pozycje.
no to żaden problem, przy dodawaniu wpisze do tabeli pozycje wartości 0:

  1. <?php
  2. mysql_connect($mysql_host,$mysql_user,$mysql_pass);
  3. @mysql_select_db($mysql_db) or die("Nie znaleziono bazy danych");
  4.  
  5. $slowo_kluczowe = $_POST['slowo_kluczowe'];
  6. $data_dodania = date(Ymd);
  7.  
  8. if($slowo_kluczowe != '')
  9. {
  10. $mysql_query = "INSERT INTO slowo_kluczowe VALUES ('','$id', '$slowo_kluczowe','$data_dodania')";
  11. mysql_query($mysql_query);
  12.  
  13. $mysql_query = "INSERT INTO pozycje VALUES ('','questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif', '0','0', '0','$data')";
  14. mysql_query($mysql_query);
  15.  
  16. echo("Dodano <strong>$slowo_kluczowe</strong> do bazy danych. Kliknij <a href="kluczowe.php?a=klucz&id=$id">tutaj</a>, aby powrócić do strony głównej.<br /><br />");
  17. }
  18. ?>


tylko w miejsce tych pytajników powinno mi wpisać ID jaki został automatycznie nadany słowu kluczowemu w tabeli slowo_kluczowe - jak to zrobić?
wipo
  1. <?php
  2. $nadany_id=mysql_insert_id();
  3. ?>
Blajo
dzięki smile.gif

no to teraz jeszcze jak mam w tabeli 'pozycje' 2 lub więcej wyników z tym samym id_sk, to chce wyświetlić TYLKO ten z najnowszą datą.
jak to znowu zrobić?
wipo
albo GROUP albo DISTINCT
poczytaj w manualu
Sabistik
Panowie może porozmawiacie sobie na prv? :P
Blajo
GORUP z tego co czytałem mi kompletnie nie pasuje, a DISTINCT nie działa.
więc jak to można jeszcze inaczej osiągnąć?
wipo
nie gorup a group
po drugie jak dobrze zastosujesz to zadziala
Blajo
  1. $qp = "SELECT s.slowo_kluczowe, s.id, s.data_dodania, p.data, p.google, p.onet, p.wp FROM slowo_kluczowe as s, pozycje as p WHERE s.id_domena = $id AND p.id_sk=s.id GROUP BY p.id_sk";
  2. $rp = mysql_query($qp) OR die(mysql_error());


Takie zapytanie powoduje wyświetlenie unikalnych słów kluczowych, tyle, że nie wyświetla niestety pozycji z najnowszą datą (załóżmy, że w bazie będzie tylko jeden wpis z jedną datą).

Jak to osiągnąć?
wipo
  1. <?php
  2. $qp = "SELECT s.slowo_kluczowe, s.id, s.data_dodania, distinct(p.data), p.google, p.onet, p.wp FROM slowo_kluczowe as s, pozycje as p WHERE s.id_
    domena = $id AND p.id_sk=s.id order BY p.data"
    ;
  3. $rp = mysql_query($qp) or die(mysql_error());
  4. ?>
Blajo
Something is wrong in your syntax obok 'distinct(p.data), p.google, p.onet, p.wp FROM slowo_kluczowe as ' w linii 1

Takie zastosowanie tej funkcji nie działa jak widać.
wipo
Do póki nie będzie aktualizacji to dużo ciekawych rzeczy Cię jeszcze ominie
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.