![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 15.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam
mam pytanko mam przykladowo 2 tabele samochody_osobowe: id| rok_produkcji | pojemnosc | opis samochody_ciezarowe: id| rok_produkcji | pojemnosc | opis i teraz przykladowo chce wystwietlic wszystkie auta ktore sa mlodsze niz 1990 rok wiec daje zapytanie
chcialbym to teraz przedstawic jako tabela, ale z dodatkowa kolumna w ktorej bedzie typ samochodu (ciezarowy lub osobowy) jak mam sprawdzic z ktorej tabeli jest dany rekord ktory trafaia do tabeli ? dzieki za info Ten post edytował Nookie 22.08.2004, 11:54:08 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 0 Dołączył: 22.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Pierwsza sprawa: jeśli jesteś wciąż na etapie projektowania swojej bazy, to proponowałbym wszystko trzymać w jednej tabeli "samochody". Wystarczy, że dodasz jedną kolumne "typ", w której będziesz zapisywał, czy to jest samochód osobowy, ciężarowy czy jeszcze jakiś inny.
Jeśli jednak nie możesz już zmienić bazy danych, to:
|
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 15.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
zmienic bazy nie moge, to co podalem to przyklad w ktorym ukazany jest probelm, a nie musialbym za duzo tlumaczyc ![]() ja mam takich tabel 8 ![]() i problem w tym ze na podstawie danych z nich musze zbudowac nazwijmy to raport ktory bedzie tabelka.. dlatego musze pobrac dane z wszystkich tabel i zaleznie z ktorej beda dane, musi byc kolumna typ samochodu (z przykadlu) co do Twojej odpowiedzi moglbys troche rozwinac/wyjasnic ? pokazac dokladniej o co chodzi ? bo nie rozumiem tego dodania union ? jak by wygladalo cale zapytanie plus pobranie danych ? plus pytanie bo ile rozumiem union pozwala mi laczyc zapytania do jednego wyniku, skad potem mam wiedziec ktore dane za z ktorej tabeli ? dzieki za info Ten post edytował Nookie 23.08.2004, 17:12:55 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 0 Dołączył: 22.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze poczytaj w dokumentacji o union
W skrócie union "skleja" wyniki z dwóch lub więcej zapytań w jedną całość. Cytat skad potem mam wiedziec ktore dane za z ktorej tabeli ? Możesz to zrobić np. tak:
Cytat jak by wygladalo cale zapytanie plus pobranie danych ? Zapytanie masz powyżej, a pobranie dokładnie tak samo jak w przypadku innych zapytań.
Ps. Union dostępne jest od MySQL 4.x |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 28 Dołączył: 9.08.2004 Skąd: Stargard Ostrzeżenie: (0%) ![]() ![]() |
Możesz spróbować tak:
Ten post edytował cim 24.08.2004, 08:23:08 -------------------- errare humanum est
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 0 Dołączył: 22.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(cim @ 2004-08-24 09:22:49) Możesz spróbować tak:
To nie jest dobre rozwiązanie, bo uzyskasz iloczyn kartezjański dwóch tabel zamiast sumy. |
|
|
![]() ![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 15.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mam kolejne pytanie troche juz z innej poleczki...
jesli mam te tabele osobowey i ciezarowe i teraz kazde z nich zawiera kolumny id, nazwa, marka (ktore sie dubluja) jak pozniej pobrac dane z dwoch tabel naraz zeby mozna wyswietlac te pola ![]() gdy robie
a pozniej staram sie pobrac dane poprzez
jesli robie zapytanie do dwoch tabel i nazwy kolumn mi sie dubluja mam problem pozniej z pokazaniem tych danych.. jak to rozwiazac ![]() dzieki za info } |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 848 Pomógł: 0 Dołączył: 7.07.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
MI NARG! Po pierwsze to nie
Tylko:
A poza tym, załóżmy, że masz dwie tabele: a i b. w nich masz dane: id, tytul, tresc. I chcesz wybrać, czy id, tytul lub tresc ma pobrać z a albo b. Wtedy piszesz cuś takiego (jeżeli chcesz, żeby pobrało id z tabeli a):
Jeśli natomiast chciałbyś pobrać id z tabeli b, piszesz:
Podsumowyjąc, wpisujesz najpierw nazwę tabeli, a po kropce dane z tabeli. ![]() |
|
|
![]() ![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 15.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Vertical, to to wiem, ze jak z danej tabeli chce wybrac warunek dl apola to wpisuje go po kropce , czyli korzystajac z przykladu
ale nie o to biega... chodzi o to ze mam przykladowo dwie tabele... osobowe: id | nazwa | marka | pojemosc | rok_produkcji | liczba_osob ciezarowe: id | nazwa | marka | pojemosc | rok_produkcji | pojemnosc i teraz chce pokazac wszystkie auta z dostepnych ktorych rok produkcji jest wiekszy niz 1990 robie takie zapytanie:
Problem mam tylko z wyswietleniem tego w postaci tabeli, gdyz czesc nazw kolumn sie dubluje, jak id, rok produkcji itp.. a czesc oczywiscie sie rozni.. i jak teraz wyswietlic to wszystko(pobrac ?) zebym mogl to przedstawic korzystajac ze zwyklego mysql_fertch_array() i potem w petli while sobie plul danymi
czy istnieje cos w stylu echo $row[osobowe.id] ? bo jak zadam pytanie takie jak wyzej.. to potem nazwy pol ktore sie powtarzaja nie sa wypluwane lub brane tylko raz(przy pierwszym ich napotkaniu) .. i wychodza jakies bezsensy ? Pliiz HELp bo juz nie mam na to pomyslu ? dzieki |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 0 Dołączył: 22.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Nookie @ 2004-08-25 23:13:52) czy istnieje cos w stylu echo $row[osobowe.id] ? Zdaje się, że nie a przynajmniej nie wiem jak. Masz dwie opcje. Pierwsza: skorzystaj z mysql_fetch_row() i odwołuj się po numerach kolumn $row[0], $row[1] itd. Druga to:
Musisz wypisać wszystkie nazwy kolumn. Odwołujesz się: $row['id_osob'] Drugie rozwiązanie jest zdecydowanie lepsze. Ten post edytował Parti 26.08.2004, 07:45:11 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
a nie powinno byc tak ?
Jak juz ktos pisał to zapytanie jakos zle sie chyba wykona... A nawet jesli dobrze to warto w fazie testów użyc print_r" title="Zobacz w manualu PHP" target="_manual wtedy dokladnie widac co i jak. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 848 Pomógł: 0 Dołączył: 7.07.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Chyba nie, bo wtedy wyświetliłby wszystkie, które są powyżej i poniżej 1990 bez 1990. Spróbuj tak:
![]() Ten post edytował Vertical 26.08.2004, 13:41:31 |
|
|
![]() ![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 15.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam, powinno byc "or": pomiedzy warunkami
ale to nie ma dluzego znaczenia.. zapytanie jest przykladowe bo ma tylko pokazac w czym rzecz... niestety tabele sa tez przykladowe.. i mam dokladnie taki sam problem tylko na 8 tabelach.. jedyne rozwiazanie jest takie jak podal Parti.. myslalem ze moze idzie wymyslic cos innego.. zwlaszcza ze przy rzeczywistym problemie.. mam jeszcze ogromna ilosc warunkow do spelnienia...
Vertical, w Twojej odpowiedz wyciagasz dane po koleji z tabel.. a to nie o to biega ![]() choc moze to bedzie latwiejsze rozwiazanie problemu.. dzieki za podpowiedz! |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 0 Dołączył: 22.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Nookie @ 2004-08-26 16:09:12) Vertical, w Twojej odpowiedz wyciagasz dane po koleji z tabel.. a to nie o to biega ![]() Z czystej ciekawości pytam: jesteś pewien, że zapytanie w stylu: daje w wyniku to co potrzebujesz? A jeśli tak, to dlaczego? Bardzo mnie to ciekawi. Jeśli dla przykładu w bazie masz 80 samochodów osobowych i 50 ciężarowych to w wyniku uzyskasz 80*50 = 4000 rekordów. Mówisz, że masz 8 tabel. Niech każda ma tylko po 10 rekordów, to iloczyn kartezjański tych tabel da 10^8 = 100 milionów rekordów. Jeśli nie ma żadnych relacji między tymi tabelami, to coś tu zdecydowanie jest nie tak. Albo może czegoś nie rozumiem. |
|
|
![]() ![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 15.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Poza tym metoda veriticala ma jeszcze jedna wade.. trudno jest porcjowac wynik tak zeby wyswietlalo sie po powiedzmy 50 wierszy na stronie...
dzieki za podpowiedzi.. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.06.2025 - 20:29 |