Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprawdzanie zawartości tabeli na podstawie innej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
mpps
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. }
Skobi
  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
mpps
@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
Skobi
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
mpps
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ć?
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.