Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> sprawdzanie zawartości tabeli na podstawie innej tabeli
mpps
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


Witam,
mam taki banalny problem...
Mam dwie tabele w bazie.
W tych tabelach są kolumny, które zawierają (prawie) takie same dane.
Kolumny to: 'id' i 'kolumna'.
Potrzebuję sprawdzić, czy dane z jednej tabeli zawierają się w drugiej tabeli i je wyświetlić.

Np.
Kod
tabela1  |  tabela2
---------------------
1   aaa   | 1    aaa
2   bbb   | 2    bbb
3   ccc   |
4   ddd   | 3    ddd


Wyświetlamy: aaa, bbb, ddd, ponieważ ccc nie ma w drugiej tabeli.

Mam już coś takiego:
  1. $result1 = mysql_query("SELECT * FROM tabela1 ORDER BY id") OR die(mysql_error());
  2. while($rek1 = mysql_fetch_row($result1)){
  3. $result = mysql_query("SELECT * FROM tabela2 WHERE kolumna=".$rek1[1]." ORDER BY id") OR die(mysql_error());
  4. while($rek = mysql_fetch_row($result)){
  5. print('<LI><A HREF="index.php?id='.$id.'&producent='.$rek[1].'">'.$rek[1].'</A></LI>');
  6. }
  7. }


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Skobi
post
Post #2





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

Ostrzeżenie: (10%)
X----


  1. SELECT
  2. *
  3. FROM tabela1 t1 LEFT OUTER JOIN tabela2 t2 ON ( t1.id = t2.id AND t1.kolumna = t2.kolumna )
  4. WHERE t2.id IS NOT NULL


tak powinno zadzialac
Go to the top of the page
+Quote Post
mpps
post
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


@Skobi
dzięki za odpowiedź.
Co oznacza 't1' w zapytaniu?
Niestety nie zwraca danych ale błędu też nie...

Zastosowałem Twoje rozwiązanie tak:
  1. $result1 = mysql_query("SELECT * FROM tabela1 t1 LEFT OUTER JOIN tabela2 t2 ON (t1.id = t2.id AND t1.kolumna = t2.kolumna) WHERE t2.id IS NOT NULL");
  2. while($rek1 = mysql_fetch_row($result1)){
  3. print('<LI><A HREF="index.php?id='.$id.'&producent='.$rek[1].'">'.$rek[1].'</A></LI>');
  4. }


Nie wiem, czy dobrze opisałem problem...
Może trochę uszczegółowię:
W jednej tabeli w kolumnie 'kolumn' będą wpisane dane, które w tej kolumnie wystąpią tylko raz.
W drugiej kolumnie dane te mogą pojawić się wielokrotnie, natomiast ja chcę je wyświetlić TYLKO RAZ.
Stąd pomysł, aby porównywać dane z dwóch tabel.
Może można uzyskać powyższe w inny sposób?
Jeśli tak, to uprzejmie proszę o podpowiedź, bo jestem za cienki w uszach winksmiley.jpg

Ten post edytował mpps 11.10.2006, 11:54:19


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
Skobi
post
Post #4





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

Ostrzeżenie: (10%)
X----


co do pierwszego pytania to t1 jest aliasem do tabeli tabela1, czyli oznacza to iż
poprzez alias t1 odnosimy sie do tej tabeli.

co do tego czy Ci nie dziala to wrzuc to zapytanie do samej bazy,
bo ja u siebie sprawdzalem i jest ok. Mozna tylko jeszcze jedna modyfikacje wprowadzic:

  1. SELECT
  2. DISTINCT *
  3. FROM tabela1 t1 LEFT OUTER JOIN tabela2 t2 ON (t1.id = t2.id AND t1.kolumna = t2.kolumna)
  4. WHERE t2.id IS NOT NULL


wlacz raportowanie bledow:

  1. <?php
  2. ?>


bo moze nie masz polaczenia z baza
Go to the top of the page
+Quote Post
mpps
post
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


no tak... złą zmienną chciałem wyświetlać dane...
skrypt faktycznie działa i wyświetla dane ale niestety dopiero wtedy, gdy zgodne są 'id' i 'kolumna'.
mój problem polega na tym, że dane w drugiej kolumnie będą miały zawsze inne indeksy niż w pierwszej, więc w ten sposób nie będę w stanie ich wyświetlić...

np.:
tabela1
Kod
   id   |  kolumna
--------------------
    1   |  auto
    2   |  rower
    3   |  kajak
    4   |  statek
    5   |  hulajnoga


tabela2
Kod
   id   |  kolumna  | opiskolumna
----------------------------------
    1   |  auto     | czarne
    2   |  rower    | czerwony
    3   |  kajak    | biały
    4   |  statek   | niebieski
    5   |  kajak    | zielony
    6   |  auto     | białe
    7   |  statek   | zielony
    8   |  rower    | czarny
    9   |  rower    | niebieski


dane w tabeli1 pojawią się tylko raz, ponieważ kolumna 'kolumna' jest oznaczona jako primary, więc nie będzie można powtórzyć takiego samego wpisu
dane w tabeli2 pojawiać się będą wielokrotnie, ale dane z kolumny 'kolumna' chcę wyświetlać tylko raz jako nazwijmy to 'kategorię'
ponieważ w tabeli2 w kolumnie 'kolumna' nie wystąpił wpis 'hulajnoga' to nie zostanie on wyswietlony

jak to rozwiązać?


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
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: 19.08.2025 - 10:13