Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: WHERE
Forum PHP.pl > Forum > Bazy danych > MySQL
switch
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 laugh.gif
Kod
SELECT * FROM tabela1, tabela2 WHERE miasto = '".$_POST['miasto']."' ORDER BY nazwa ASC


Pewno to jest proste jak drut..... dzięki
Foxx
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]
?
uboottd
Podaj blizsze szcegoly budowy bazy.
adwol
php Początkujący => Bazy danych
switch
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
Foxx
No ale czekajcie... to ja się wygłupiłem z tą odpowiedzią?
Jak tak to powiedzcie, nie chcę trwać w błędzie
switch
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 sad.gif
switch
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ą. biggrin.gif
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)
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-2024 Invision Power Services, Inc.