Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]łączenie danych z rekordów
Forum PHP.pl > Forum > Przedszkole
fr33d0m
Hello,

Mam skomplikowany problem i nie wiem jak się za niego zabrać...
Załóżmy, że tabela ma 10 kolumn i 10 rekordów - każdy rekord ma: różną lub taką samą lub brak wartości.
Cechą wspólną wszystkich rekordów niech będzie kolumna o nazwie "szukam" o wartosci "123".



Jak skonstruować zapytanie, które wyświetli mi KOMPLETNE dane dla wartości 123? Zakładając, że za pomocą jednego rzędu rekordów nie wyświetlę kompletnych danych ponieważ są braki w kolumnach? Nie wiem jak to jaśniej opisać - mam nadzieję, że ktoś zrozumie... wstydnis.gif
Sephirus
Teoretycznie da się coś takiego zrobić złączeniami może lecz to chyba nie najlepszy pomysł. Jeśli dobrze Cię rozumiem to przy założeniu że mam 4 kolumny (a nie 10) wygląda to tak:

Kod
a | - | - | 123
- | b | - | 123
x | y | z | 124
- | - | c | 123


i chciałbyś aby zwrócić dla 123 rekord tak by wyszło a,b,c? A co jeśli jest np 5 takich rekordów i w jednym polu masz rózne wartości? Którą zwrócić?

Ogólnie mi to się wydaję jakimś antywzorcem struktury bądź złym sposobem umieszczania danych.

Jeśli masz wiele rekordów dotyczących tego samego "123" to nie powinno tak być tylko do jednego powinny być dopisywane pola które uprzednio były puste...

Może coś źle rozumiem - rozpisz to bardziej smile.gif
fr33d0m
Dzięki za odpowiedź Sephirus smile.gif
Perfekcyjnie zrozumiałeś moje pytanie. Jeśli będzie 5 takich rekordów i w jednym polu będą rożne wartości to wybrać pierwszą lepszą - bez większego znaczenia.
Gdybyś mógł zarzucić prowizorycznym kodem dla pomocy jak to ma mniej-więcej wyglądać to przynajmniej będę wiedział jak mam wziąć się za to...

Ogólnie polega to na wyświetlaniu np. miejsca z poszczególnym opisem takim jak np. ulica, miejscowosc, ocena itp.
Rozwiązałem to w ten sposob, ze uzytkownik gdy dodaje `nowe miejsce` do bazy, to wpisuje obowiazkowo wylacznie tytul i miejscowosc - reszta pól z opisem dokladniejszym `miejsca` jest nie obowiazkowa. Robi sie jeden nowy insert do jednej tabeli i pozniej to wyswietlam, z tym, ze pobieram wszystkie informacje na temat danego `miejsca` z wszystkich INSERTOW zrobionych na temat tego danego miejsca(tak jak powyzej to zademonstrowałeś). Nie wiem jak to zrobic inaczej... będę wdzięczny za poradę. Nie chcę robić tego w taki sposób, że przed zrobieniem INSERTA z nowym miejscem - sprawdzam w bazie czy dane miejsce o podanej nazwie juz istnieje i UPDATOWAC zamiast INSERTOWAC - poniewaz jak wiadomo, uzytkownicy lubia robic pomylki we wpisywaniu konkretnej nazwy miejsca, a pozniej przy wyswietlaniu zrobil by sie jeden wielki burdel. Ogolnie to faktycznie powinienem zmienic calosc - tylko w jaki sposob zrealizowac takie zalozenie? Ma ktos pomysly?
Wazniak96
Jeśli dobrze zrozumiałem to do tabeli są dodawane miejscowości z jakimiś tam danymi. A dodaje następne po to, żeby w razie pustego pola w innych uzupełniło je. tak.?
Jeżeli tak to możesz zrobić to jednym rekordem, a przy następnym dodawaniu rekordu updatować jedynie te pola które są puste.

Jeżeli na siłę musisz zrobić tak jak masz, że kilkoma to pokombinuj coś z implode() bądź też stwórz tablicę(wyglądającą, i zawierającą te same pola co z bazy) i w pętli puść rekordy uzupełniając poszczególne elementy tablicy jeżeli są puste ;p
fr33d0m
Wazniak96, dobrze zrozumiales - problem w tym, ze nie zrobie poprawnego UPDATE jesli uzytkownik wprowadzi chociazby odrobine inna nazwe danego `miejsca` (swiadomie badz nie).
Rekordy uzupelniajace to faktycznie jest jakies wyjscie z problemu i jesli nikt nic lepszego nie zasugeruje to chyba tak zrobie:)
timon27
Możesz skorzystać z funkcji MAX - działa ona również na ciągach (leksykograficznie).

  1. SELECT MAX(kolumna1),MAX(kolumna2),MAX(kolumna3) FROM baza GROUP BY szukam


Da ci dokładnie to czego szukasz.
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.