Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Zapytanie SELECT i INNER JOIN
Forum PHP.pl > Forum > Przedszkole
Turson
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]'";
Ulysess
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
Turson
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.
Ulysess
a probowales mojego rozwiazania ?
Turson
Jeśli pod a i b mam podstawiać własne wartości to tak i kod jest 2 posty wyżej.
Ulysess
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
pmir13
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";
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.