Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Łaczenie 2 kolumn tej samej tabeli
Forum PHP.pl > Forum > Przedszkole
orlik99
Witam,
Mam tabele z kategoriami a w niej: id, title, parent, - jeśli kategoria jest główna jej parent wynosi 0, w przeciwnym razie id kategori nadrzednej....
Chciałbym wyświetlić tabelkę: tytuł kategorii i nazwę rodzica...

Próbowałem tak:
  1. SELECT * FROM categories

a później warunek:
  1. <?php if ($post['parent'] == '0') { echo "Brak"; } else { echo $post['title']; } ?>

Niestety nie działa tak jak chce...
Proszę o pomoc przy zapytaniu.
daniel1302
Po 1 to się zarejestruj bo wiele osób nawet nie wchodzi na tematy niezarejestrowanych, ja z reguły też, ale jako, żetemat dotyczy DB to wszedłem

Po 2 zainteresuj się tematem łączenia zapytań za pomocą JOIN
webmaniak
Nawet bez rejestracji wystraszy użyć wyszukiwarki z hasłem np. JOIN, ewentualnie z hasłem takim jaki masz temat. Znajdziesz tego mnóstwo.
orlik99
@webmaniak
Potrafię łączyć kilka tabel - lecz nie wiem jak tego użyć w przypadku jednej...
Proszę o pomoc przy zapytaniu.
webmaniak
JOIN to element zapytania :-)
Zasugerowałem się odpowiedzią kolegi który pierwszy Ci odpisał.
Po kolei:
Masz tabelę categories a w niej trzy kolumny, chcesz pobrać dwie. Typw czym problem?
Kod
SELECT title, parent FROM categories

Oto chodzi? Jeśli tak to Twoje zapytanie jest dobre tylko trzeba je wykorzystać we właściwy sposób-taki jaki chcesz. Poczytaj o pobieraniu danych z bazy.
p.s. Nie widziałem łączenia jednej tabeli :-)
P.S2. Zarejestruj się, bo jak widzisz marny odzew jest na Twoje pytanie.
orlik99
Dzięki za odpowiedź - wiem, ale nie mogę coś przejść rejestracji - cały czas błąd... wysłałem już email do admina.
Co do problemu - mam np taką zawartość:
id | title | parent
1 | start | 1
2 | arty | 0
3 | gry | 2

jeśli użyję:
  1. SELECT title, parent FROM categories


otrzymam:
arty | brak
gry | gry
start | start

a powinno być:
start | start
arty | brak
gry | arty

Mam nadzieje że rozumiecie o co chodzi...
luke18dg
Ja bym zrobił tak, po pierwsze pobrał bym całą kolumnę którą chcesz porównywać. Później za pomocą foreach przypisywał to tabeli o wartościach parent.
Np masz
id | title | parent
1 | start | 1
2 | arty | 0
3 | gry | 2
To foreach pobiera start i 1, to ma zapisać w $tablica[1].='start'; i tak dalej.
Przy samym wyświetlaniu sprawdzasz jaki jest ostatni indeks i robisz pętelkę for. Oczywiście z warunkiem czy dany indeks jest w tabeli. Ponieważ nie chcemy jakiś dziwnych błędów dotyczących nie zdefiniowanego indeksa.

EDIT Kolega może nie zarejestrowany, ale ciekawy ma nick tymczasowy : )
Tak wg jeśli nie dochodzi, to warto sprawdzić SPAM lub jeśli o2 to poczekać dłużej.
webmaniak
Nie rozumiem Twojego problemu. Co w ogóle chcesz wyświetlić? Kod:
Kod
SELECT title, parent FROM categories

pobiera najpierw wiersz pierwszy, następnie drugi i trzeci. Dlatego masz taką strukturę.
arty | brak
gry | gry
start | start
To co chcesz mieć można uzyskać przez posortowanie wyników, wtedy Twoje zapytanie SELECT będzie bardziej rozbudowane - o ile chcesz wyniki posortowane po id malejąco.
Michasko
  1. SELECT title AS "tytul", (SELECT k2.tytul FROM kategorie k2 WHERE k2.id = k1.parent) AS "rodzic" FROM kategorie k1
orlik99
@Michasko,
Dzięki, działa tak jak chcę. Tylko nie wiem jak dopisać aby wyświetlał też opisy, id i statusy kategorii (wszystkich) bez względu na parent...

@luke18dg,
Nie mogę przejść rejestracji jeszcze na etapie formularza.... Cały czas pokazuje komunikat "Błędna odpowiedź, nie zarejestrujesz się dopóki nie podasz prawidłowej odpowiedzi na zadanie!" . Jestem pewien, że wynik działania i kod z obrazka wpisuję prawidłowy.... Ale jak tylko mi się uda - na pewno się zarejestruję.
Michasko
Nie wiem czy dobrze zrozumiałem, ale strzelam:
  1. SELECT k1.id, k1.title AS "tytul", (SELECT k2.tytul FROM kategorie k2 WHERE k2.id = k1.parent) AS "rodzic", k1.STATUS, k1.opis FROM kategorie k1
oczywiście nazwy pól zgadywałem, więc jak coś to musisz sobie poprawić.

Jeśli chodzi o rejestrację - nie jestem pewien, czy dobrze kojarzę, ale wynik chyba trzeba podać słownie, a nie cyfrą.
orlik99
@Michasko,
Dzięki, - wszytko działa jak chciałem.
A z tą rejestracją - kod z obrazka przepisuję na pewno prawidłowy, "test na człowieczeństwo" - na początku wynik podawałem liczbą, gdy teraz podaje słownie pojawia się komunikat "Nie odpowiedziałeś na pytanie sprawdzające czy jesteś człowiekiem!". Kurczę nie wiem co dalej robić.
orlik99
Przepraszam, że znów zawracam głowę....
chciałbym aby kategorie wyświetlały się posortowane najnowsza na górze (ORDER BY id DESC)..

Próbuję tak:
  1. SELECT k1.id, k1.title AS 'tytul', (SELECT k2.title FROM categories k2 WHERE k2.id = k1.parent ORDER BY k2.id DESC) AS 'rodzic', k1.STATUS, k1.description FROM categories k1 ORDER BY k1.id DESC

ale nie działa - nic się nie zmienia.
Proszę o pomoc.
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.