Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie do dwóch tabel ale jak wyciągnać id tylko jednej z nich
Forum PHP.pl > Forum > PHP
Szymon80
witam.

Mam zpytanie do dwóch tabel jednocześnie, przykład

  1. $zapyt = mysql_query("select * from tabela1 t1, tabela2 t2 where t1.nazwa='".$_POST[nazwa]."' or t2.nazwa='".$_POST[nazwa]."' ");

Teraz jak wyciągnąć id tylko z "tabela1" ?
batman
  1. $zapyt = mysql_query("select t1.id from tabela1 t1, tabela2 t2 where t1.nazwa='".$_POST[nazwa]."' or t2.nazwa='".$_POST[nazwa]."' ");
webmaniak
Odnawiam. Mam tabele articles. Chce z niej wyciągnąć id, tytul, tresc, data. Druga tablica to articles_categories i z niej chce wyciągnąć opis. Jak mam dać zapytanie i jak później to wypisać na stronie?? Czytałem przykłady zapytań i to z drugiego postu-próbowałem wstawić, ale nie bardzo to wychodzi. mam błąd
  1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /... on line 60

Ale wydaję mi się że zapytanie też jest błędne. Zapytanie dałem:
  1. $zapytanie = mysql_query("select * from articles t1, articles_categories t2 where t1.articles='".$_POST[articles]."' or t2.articles_categories='".$_POST[articles_categories]."' ");

Będę wdzięczny za pomoc, a jeszcze bardziej za wytłumaczenie.
tehaha
jakie masz kolumny i na której kolumnie mają się łączyć tabele?
webmaniak
Chce zrobić tabele na stronie z tych dwóch, gdzie będę miał kolumny id, tytul, data, kategoria.
Pola id, tytuł, data znajdują się w tabeli articles, natomiast pole kategoria jest w tabela articles_categories. Mam nadzieję że oto było pytanie, ale lepiej napiszę strukturę tabel:
articles-kolumny:
id, id_cat, tytul, tresc, opis, data
articles_categories-kolumny:
id, nazwa, opis.
tehaha
  1. $sql = "SELECT a.id, a.id_cat, a.tresc, a.opis, a.data, b.id, b.nazwa, b.opis FROM articles a LEFT JOIN articles_categories b ON a.id_cat = b.id";


co do wytłumaczenie to poszukaj o LEFT JOIN i poczytaj manual, on nie gryzie, a tak w kilku słowach to do każdego rekordu z tabeli articles próbujemy znaleźć rekord z tabeli articles_categories łącząc je na w miejscu gdzie numer id z pola id_cat odpowiada numerowi id z pola id
webmaniak
  1. $x=1;
  2. $zapytanie = "SELECT a.id, a.id_cat, a.tresc, a.tytul, a.data, b.id, b.nazwa FROM articles a LEFT JOIN articles_categories b ON a.id_cat = b.id";
  3. while($wynik=mysql_fetch_array($zapytanie))
  4. {
  5. echo '<td>'.$x.'</td><td>'.$wynik['a.tytul'].'</td><td>'.date("d.m.Y, H:i", $wynik['a.data']).'</td><td>'.$wynik['b.nazwa'].'</td>
  6. </table>';
  7. $x++;
  8. }

i nadal ten blad

  1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /... on line 60

Dodam tylko że dałem to zapytanie w phpmyadmin i niby pokazało mi wynik, czyli zapytanie jest dobrze, ale ten błąd to nie wiem czemu.
tehaha
masz błąd bo nie użyłeś funkcji mysql_query()
mortus
Cytat(webmaniak @ 2.05.2010, 10:07:15 ) *
Chce zrobić tabele na stronie z tych dwóch, gdzie będę miał kolumny id, tytul, data, kategoria.
Pola id, tytuł, data znajdują się w tabeli articles, natomiast pole kategoria jest w tabela articles_categories. Mam nadzieję że oto było pytanie, ale lepiej napiszę strukturę tabel:
articles-kolumny:
id, id_cat, tytul, tresc, opis, data
articles_categories-kolumny:
id, nazwa, opis.

  1. SELECT a.id id, a.tytul tytul, a.DATA DATA, ac.nazwa kategoria FROM articles a LEFT JOIN articles_categories ac ON ac.id=a.id_cat
A jeśli chcesz ograniczyć wyniki np. do konkretnej kategorii, to do zapytania dopisujesz odpowiednią klauzulę WHERE.

@tehaha Przecież Twoje zapytanie zadziała jak
  1. SELECT a.*, ac.* FROM articles a LEFT JOIN articles_categories ac ON ac.id=a.id_cat
A kolega chce wyciągnąć tylko konkretne kolumny. Poza tym nie będzie czegoś takiego jak $wynik['a.tytul'].
tehaha
@mortus specjalnie nie zrobiłem z gwiazdkami bo powinno się wyciągać tylko potrzebne kolumny a to jest uzależnione od sytuacji np. czy wyświetla cały artykuł czy tylko listę z tytułami itd, więc dałem tak żeby @webmaniak sobie już dostosował tak jak potrzebuje.
webmaniak
Dziękuje Wam za pomoc. @tehaha miał rację z tym mysql_query-moje przeoczenie-a męczyłem się z tym błędem, czytałem manual temat na tym forum odnośnie tego błędu, a jak widać rozwiązanie było banalne. Oczywiście tak jak pisał @tehaha wziąłem to zapytanie jako przykład i zastosowałem do własnych potrzeb. Dlatego jeszcze raz dziękuję. Zrobiłem też zapytanie używając INNER JOIN i też działa:
  1. $zapytanie=mysql_query("SELECT * FROM articles AS a INNER JOIN articles_categories AS ac WHERE a.id_cat=ac.id");

Ale chyba lepsze jest to z LEFT JOIN??
tehaha
to zależy, przy zapytaniu z LEFT JOIN do tabeli articles próbujemy znaleźć odpowiadający mu rekord w tabeli article_categories przez łączenie kolumn id = cat_id, jeżeli w article_categories nie ma rekordu z id takim jak w cat_id to wtedy zwrócone zostaną tylko dane z tabeli articles, natomiast przy INNER JOIN jeżeli nie zostanie znaleziony odpowiednik w tabeli article_categories to rekord nie zostanie zwrócony

więc sam musisz stwierdzić jak chcesz żeby to działało
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.