Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Łaczenie 2 kolumn tej samej tabeli
-orlik99-
post 14.02.2013, 20:09:14
Post #1





Goście







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.
Go to the top of the page
+Quote Post
daniel1302
post 14.02.2013, 20:20:09
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


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
Go to the top of the page
+Quote Post
webmaniak
post 14.02.2013, 21:47:05
Post #3





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


Nawet bez rejestracji wystraszy użyć wyszukiwarki z hasłem np. JOIN, ewentualnie z hasłem takim jaki masz temat. Znajdziesz tego mnóstwo.


--------------------
Pomogłem - kliknij , wprowadziłem w błąd - poinformuj niżej lub na pm.
Go to the top of the page
+Quote Post
-orlik99-
post 14.02.2013, 22:02:50
Post #4





Goście







@webmaniak
Potrafię łączyć kilka tabel - lecz nie wiem jak tego użyć w przypadku jednej...
Proszę o pomoc przy zapytaniu.
Go to the top of the page
+Quote Post
webmaniak
post 14.02.2013, 22:21:10
Post #5





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


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.

Ten post edytował webmaniak 14.02.2013, 22:24:31


--------------------
Pomogłem - kliknij , wprowadziłem w błąd - poinformuj niżej lub na pm.
Go to the top of the page
+Quote Post
-orlik99-
post 14.02.2013, 23:36:05
Post #6





Goście







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...
Go to the top of the page
+Quote Post
luke18dg
post 15.02.2013, 00:59:36
Post #7





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 26.03.2011
Skąd: Dąbrowa Górnicza

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


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.

Ten post edytował luke18dg 15.02.2013, 01:00:47
Go to the top of the page
+Quote Post
webmaniak
post 15.02.2013, 07:55:20
Post #8





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


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.


--------------------
Pomogłem - kliknij , wprowadziłem w błąd - poinformuj niżej lub na pm.
Go to the top of the page
+Quote Post
Michasko
post 15.02.2013, 10:04:25
Post #9





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

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


  1. SELECT title AS "tytul", (SELECT k2.tytul FROM kategorie k2 WHERE k2.id = k1.parent) AS "rodzic" FROM kategorie k1


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
-orlik99-
post 15.02.2013, 13:12:10
Post #10





Goście







@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ę.
Go to the top of the page
+Quote Post
Michasko
post 15.02.2013, 14:07:24
Post #11





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

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


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ą.

Ten post edytował Michasko 15.02.2013, 14:09:37


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
-orlik99-
post 15.02.2013, 15:15:59
Post #12





Goście







@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ć.
Go to the top of the page
+Quote Post
-orlik99-
post 16.02.2013, 11:49:53
Post #13





Goście







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.
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 14:19