![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Baza składa się z trzech tabel. Wszystko ładnie i pięknie gra, pobieram sobie dane definiując polecenia do poszczególnych pól co powoduje wyświetlenie się linku z numerem ID, po naciśnieciu którego wszystkie potrzebne dane poprzez polecenie LEFT JOIN zbierają się do kupy i pięknie to działa. Danych jednak przybyło i chcialbym mieć możliwość bardziej szczegółowego podziału kategorii. Np jeżeli wybiorę pole nazwa, chciałbym skrócic wynik tego wyszukiwania do jakiejś jednej grupy np. nazwa w jednym mieście. Wyświetlam, więc dodatkowe dane poprzez formularz (po wyświeleniu się wszystkich danych z pola nazwa) i chcę to skrócić, czyli :
[php:1:9fa482f3a6]<?php $link = mysql_connect("baza", "uzytkownik", "haslo") or die ("Nie można połączyć się z bazą danych - zapraszam później."); $mam = mysql_select_db ("nazwa_bazy") or die ("Nie można połączyć się z bazą danych - zapraszam później."); $pytanie = mysql_query ("SELECT miasto FROM tabela2 GROUP BY miasto"); echo"<form action='wynik.php' method='post'>"; echo"<select name='miasto' >"; while($row = mysql_fetch_array($pytanie)) { $miasto = $row['miasto']; echo"<option value='$miasto'>".$miasto."</ option>"; } echo"</select>"; ?>[/php:1:9fa482f3a6] OK i teraz chciałbym w wynik.php pobrać pole nazwa w zależności od miasta. Nie mam problemu, jeżeli miasta będą umieszczone w tej samej tabeli co szukana nazwa wtedy daje polecenie: Kod SELECT id, nazwa, miasto FROM tabela1 WHERE miasto = '".$_POST['miasto']."' ORDER BY nazwa ASC Natomiast ja mam miasta w drugiej tabeli i nie za bardzo wychodzi mi wyszukiwanie pola nazwa w pierwszej tabeli w zależności od pola miasto w drugiej tabeli. Próbowałem LEFT JOIN, ale może coś pochrzaniłem bo pokazywał błąd. Rozwiązanie poniżej jest bez sensu, gdyż pokazuje dokładnie wszystkie dane bez skracania ![]() Kod SELECT * FROM tabela1, tabela2 WHERE miasto = '".$_POST['miasto']."' ORDER BY nazwa ASC
Pewno to jest proste jak drut..... dzięki |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) ![]() ![]() |
A tak:
[sql:1:0112082386] SELECT * FROM tabela1, tabela2 WHERE tabela1.miasto = '".$_POST['miasto']."' AND tabela2.miasto='".$_POST['miasto']."' ORDER BY nazwa ASC [/sql:1:0112082386] ? |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
Podaj blizsze szcegoly budowy bazy.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
php Początkujący => Bazy danych
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Sama baza jest debilnie skonstruowana i nie mam na to wpływu, aby to zmienić. Mało kto widział taki bałagan jaki tam panuje. Baza jest odzwierciedleniem trzech tabel z programu Access i cały dowcip polega na tym, aby struktura bazy na serwerze odpowiadała strukturze Accessa. Wystarczy bowiem przerzucac potem tak samo nazwane tabele do bazy na serwerze, aby mieć zgodność. Niestety robiący baze w Accessie zrobił z tego mały koszmarek. Cały dowcip polega na tym, że w jednej tabeli jest podana nazwa, drugiej miasto, trzeciej uczestnicy. Dla skrócenia podam, że tabele łączą się ze sobą np tabela w której występuje pole "nazwa" ma pole "A " , które odpowiada polu "A" w tabeli, gdzie umieszczona jest pole "miasta".
Czyli: Kod LEFT JOIN gdzie ON tam.A = gdzie.A
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) ![]() ![]() |
No ale czekajcie... to ja się wygłupiłem z tą odpowiedzią?
Jak tak to powiedzcie, nie chcę trwać w błędzie |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Twoje zapytanie miało by sens kiedy w obu tabelach wystąpi nazwa "miasto" i będzie mieć te same wartości. Tutaj jest trudnej, gdyż każda wartośc jest w innej tabeli. Dlaczego ten kto to robił nie wykonał tego w jednej tabelii, jeżeli i miejsce i nazwa oczywiście sie łączą za sobą. Ale tę zagadke może nam wyjaśnić tylko firma Microsoft ze swoim Accessem
![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Znalazlem rozwiązanie i podaję je dla wszystkich, którzy będą mieli ten sam problem.
Kod SELECT * FROM tabela1, tabela2 WHERE tabela2.miasto = '".$_POST['miasto']."' AND tabela1.A=tabela2.A
Oznacza to, że należalo podać jeszcze warunek połączenia dla obu tabel tak, aby dane zgadzały się ze sobą. ![]() Tutaj polami łączącymi obie table dla przykładu jest pole "A". Wiedziałem ,że to jest proste jak drut tylko problemem było to wymysleć 8) |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.06.2025 - 06:10 |