Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Zapytanie SELECT i INNER JOIN
Turson
post
Post #1





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Mam problem z napisaniem zapytania.
Przykładowo link wygląda tak - blablabla.pl/?wpisy&d=13
Gdzie &d = ID nazwy działu. Przy podaniu odpowiedniego $d ma wyświetlić wpisy, które mają nazwę id $d.

Wyjaśnię prościej:
Tabela 'dzialy' -> ID (np. 10), NAZWA (np. marzec).
Tabela 'blog' -> ID (np. 1), TYTUL (np. czesc), DZIAL (np. marzec).

$d musi być ID działu i ma wyświetlić się w rezultacie wpis z tabeli blog gdzie dzial=marzec (wyciagniety po id z $d i nazwa).

Za nic nie mogę napisać dobrego zapytania
  1. $query = "SELECT * FROM `blog` INNER JOIN `dzialy` ON `blog`.`dzial` = `dzialy`.`nazwa` WHERE blog.dzial = '$_GET[d]'";
Go to the top of the page
+Quote Post
Ulysess
post
Post #2





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


może źle zrozumiałem ale..
  1. SELECT a.* FROM `blog` a INNER JOIN `dzialy` b ON a.`dzial` = b.`nazwa` WHERE a.`dzial` = zmienna_id
Go to the top of the page
+Quote Post
Turson
post
Post #3





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Wytłumacze to skryptami dla łatwiejszej interpretacji.

  1. $zapytanie4 = "SELECT * FROM `dzialy` ORDER BY `id` DESC";
  2. $idzapytania4 = mysql_query($zapytanie4);
  3. while ($dane4 = mysql_fetch_assoc($idzapytania4)) {
  4. echo ' <li>+ <a href="index.php?id=show&pokaz=dzial&d='.$dane4['id'].'">'.$dane4['nazwa'].'</a></li>';}

  1. if($_GET["pokaz"]=="dzial"){
  2. if(is_numeric($_GET["d"])){
  3. if(mysql_num_rows(mysql_query("select id from dzialy where nazwa='$_GET[d]'"))){
  4. echo 'Wpisy działu <b>'.$_GET['d'].'</b><br>';
  5. $zapytanie2 = "SELECT * FROM `blog` INNER JOIN `dzialy` ON dzialy.`nazwa` = blog.`dzial` WHERE blog.`dzial` = '$_GET[d]'";
  6. $idzapytania2 = mysql_query($zapytanie2);
  7. while ($dane2 = mysql_fetch_assoc($idzapytania2)) {
  8. echo '<a href="index.php?id=show&pokaz=wpis&nr='.$dane2['id'].'">'.$dane2['tytul'].'</a><br>';}}
  9. else echo "Poszukiwany dział nie istnieje.";}}

Na tym drugim kodzie zabawa się kończy.

Baza danych tak jak w pierwszym poście.
Go to the top of the page
+Quote Post
Ulysess
post
Post #4





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


a probowales mojego rozwiazania ?
Go to the top of the page
+Quote Post
Turson
post
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jeśli pod a i b mam podstawiać własne wartości to tak i kod jest 2 posty wyżej.
Go to the top of the page
+Quote Post
Ulysess
post
Post #6





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


po pierwsze $_GET['d'] a nie $_GET[d] po 2 skoro uzywasz inner joina nadawaj nazwa tabel oraz pol aliasy z ktorych pochodza...

po 3 jesli dalej nie bedzie dzialac to wyswietlaj sobie zapytanie i tak analizuj az dojdziesz w czym lezy problem wink.gif
Go to the top of the page
+Quote Post
pmir13
post
Post #7





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


W tabeli blog powinieneś mieć numeryczny id działu zamiast tekstowej nazwy. Bo jeśli zechce ci się zmienić nazwę działu, to będziesz robił update dla wszystkich wpisów z tego działu? Poza tym po co te same informacje przechowywać w dwóch tabelach? Int zajmuje 4 bajty, porównanie WHERE blog.id_dzialu=dzialy.id jest o wiele szybsze niż WHERE blog.nazwa_dzialu=dzialy.nazwa, łączenie tabel po indeksie numerycznym o wiele szybsze niż po tekstowym, zapytania są prostsze.
Wtedy mając id działu z formularza nazwę tego działu masz prostym zapytaniem z tabeli dzialy, a wpisy dostajesz przez równie proste zapytanie bez potrzeby łaczenia tabel:
  1. $query = "SELECT * FROM blog WHERE id_dzialu = $id";
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 04:47