![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.08.2011 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Witam. Jestem nowym użytkownikiem na tym forum. Tworzę nową stronę internetową i mam związany z tym problem. Chcę wyciągnąć z bazy danych, z różnych tabel informacje, jednak chcę to zrobić "jednocześnie". Tzn dokładnie chodzi mi o to, że chcę wyciągnąć informacje o obrazkach i filmikach, a później wyświetlić je, tak, żeby były pomieszane i posortowane (według daty dodania).
Wpadłem na pomysł, żeby użyć jednego while, jednak prawdopodobnie jeżeli pierwszy warunek jest spełniony to drugiego już nie sprawdza, a mi zależy na tym, żeby sprawdzał... Tu jest ta nieszczęsna pętla...
Jeśli ktoś wie jak można mi pomóc to będę wdzięczny :) Ten post edytował JinLisek 1.08.2011, 16:10:06 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
pomieszane i posortowane ?
![]()
jak chcesz mieć date rosnąco to zamiast DESC daj ASC. poza tym, da radę wszystko dać do jednego zapytania -------------------- :)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.08.2011 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie zrozumiałeś chyba :P
Ja chcę pobrać dane z dwóch różnych tabel, które nie są ze sobą w żaden sposób powiązane (jedna przechowuje dane o filmikach, druga o obrazkach). Myślałem, żeby to zrobić JOINEM, ale skoro nie są powiązane to nie wiedziałem czy da radę tak... Może postaram się lepiej wytłumaczyć o co mi chodzi. 1. Użytkownicy dodają filmiki i obrazki. 2. Użytkownik chce wyszukać obrazek albo filmik. 3. Moja wyszukiwarka ma jednocześnie szukać obrazków i filmików (które są w różnych tabelach w bazie danych). 4. Wyniki ma wyświetlać według daty dodania (najnowsze). 5. Problem polega na tym, że jeśli dam wypisywanie tych danych do różnych pętli while to nie wypisze mi np w ten sposób: -obrazek; -obrazek; -filmik; -obrazek; -filmik; -filmik; (według tego, co jest najnowsze). Z moimi umiejętnościami mogę najwyżej wyświetlić z jednej strony posortowane obrazki, z drugiej strony posortowane filmiki albo najpierw jedno, a pod spodem drugie... Jednak nie o to mi chodzi :p Dlatego proszę o pomoc :) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
pobierz wszystko do tablicy (jednej), w taki sposob, żebyś potem potrafił odróżnić czy dany rekord jest obrazkiem czy filmikiem.
każdy rekord musi mieć pole data z takim samym formatem daty. następnie posortuj tablicę -------------------- :)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.08.2011 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
To muszę zrobić tablicę obiektów? Tzn jedno pole tablicy musi zawierać obiekt, który mówi czy jest to obrazek czy wideo, date dodania itp?
Edycja: aaa... Chodziło o nową tablicę w bazie danych? Zrozumiałem, że chodzi o tablicę jako zmienną (array), mój błąd... Spróbuję i napiszę jak mi poszło! Dzięki :) Jednak nie będę próbował tego sposobu.. Jakoś mi się nie podoba przepisywanie rekordów z 2-3 tablic do jednej... Jest może sposób, żeby w jednym zapytaniu pobrać rekordy z różnych, niepowiązanych ze sobą tablic? Ok, moderator powiedział, że odświeżanie tematu to mniejsze zło niż tworzenie nowego, tak więc napiszę tu do czego doszedłem (sam).. :p Otóż opracowałem taki o to dziwny warunek, dzięki któremu mogę wypisywać jednocześnie z dwóch różnych zapytań:
Wydaje mi się, że działa to dobrze, jednak chciałbym znać wasze zdanie na ten temat, jako iż nie jestem profesjonalistą... Jednak nie zawsze działa... Jeśli jest więcej wyników z tabeli $wideo niż z $obrazki to nie wyświetla wszystkich obrazków... Mimo, że według mnie powinno wyświetlać ponieważ po "&&" (AND) zwracam wartość 1 - true... Pomoże mi ktoś edytować ten warunek? Chodzi mi o to, żeby pętla póki może wypisywała z obu tabel, a później wypisywała z tej, z której nadal może (wiadomo, nie zawsze będzie tyle samo obrazków co filmików). Ten post edytował JinLisek 5.08.2011, 12:06:14 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 435 Pomógł: 40 Dołączył: 16.02.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj w ten sposób:
Ale myślę, że sposób z tablicą i tak będzie najlepszy w twoim przypadku. (tablica w sensie ARRAY, nie tworzenie nowej tabeli w DB ;D)
-------------------- Linkedin | ...
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.08.2011 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki za pomoc :)
Mam jeszcze jedno pytanie.. Chciałbym wiedzieć jak taką tablicę posortować, żeby wyświetlała rekordy od najnowszego... Mam kolumnę "data_dodania", ale jest ona w takiej postaci: Y.m.d H:i, więc nie da rady chyba posortować według niej... Mógłbym też sortować według id, ale obrazki i wideo mają osobno liczone id, więc nie sortowałoby dokładnie... Macie pomysł? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
A dlaczego nie możesz użyć union select? Tylko będziesz walił dwa zapytania....
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.08.2011 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A dlaczego nie możesz użyć union select? Tylko będziesz walił dwa zapytania.... Poczytałem trochę o union i to chyba rzeczywiście najlepsze rozwiązanie dla mnie... Tylko znowu jest problem z posortowaniem... Jeżeli posortuję te tabele w tym zapytaniu z union to one i tak będą posortowane osobno... Dam przykład:
W takim razie gdybym miał tabele np tak ułożone: images: nazwa | data dodania obrazek1 | 2011 obrazek2 | 2009 obrazek3 | 2011 movies: nazwa | data dodania filmik1 | 2001 filmik2 | 2010 To i tak wypisałoby mi w tej kolejności: obrazek1, obrazek3, obrazek2, filmik2, filmik1... A chodzi mi o to, żeby wypisało np. w takiej kolejności: obrazek1, obrazek3, filmik2, obrazek2, filmik1 Odświeżam po raz kolejny... Nadal nie wiem w jaki sposób posortować te dane... Próbuję na bardzo różne (często dziwne) sposoby, ale nic nie pomaga... Naprawdę nikt nie wie jak to zrobić? |
|
|
--kacper.chrapa-- |
![]()
Post
#10
|
Goście ![]() |
Witam :-)
1. Zrob widok : CREATE VIEW filmiki_i_obrazki AS SELECT * FROM `images` UNION SELECT * FROM `movies` 2. I teraz z poziomu PHP mozesz po prostu : SELECT * FROM filmiki_i_obrazki ORDER BY data_dodania ASC I po sprawie - sortujesz jak chcesz caly zsumowany zestaw danych - no i w PHP bardziej elegancki kod, bo odwołujesz sie do jednego widoku zamiast 2 tabel. Oczywiscie, jesli chodzi o odczyt to widok traktujesz jak zwykla tabelke - where, limit, itd dziala jak przy zwyklej. Pozdrawiam, Kacper Chrapa http://www.edusequence.com/informacje/szkolenia |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.08.2011 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki! Teraz działa jak należy :) Chociaż musiałem w tabeli `movies` dodać 2 kolumny, ponieważ tabele różniły się liczbą kolumn, a teraz id_wideo jest przechowywane w "id_obrazka" etc, ale wiem jak je rozróżnić, więc jest dobrze xp
|
|
|
--kacper.chrapa-- |
![]()
Post
#12
|
Goście ![]() |
Hmm.. kolumn nie trzeba dodawac ;-)
wystarczy create view filmy_i_obrazki as select id_obrazka,obrazek,kolumna_jakas from obrazki union select id_filmu,film,kolumna_jakas from filmy Chodzi o to aby WYBRANA ilosc kolumn z obu tabel sie zgadzala (oraz odpowiednie typy danych). Generalnie, problem ten pojawia sie na poziomie unii, a nie widoku - dziwne, z postow wynikalo (w kazdym razie na pierwszy rzut oka), ze union juz Ci dziala - czyli ze miales struktury tabel analogiczne do siebie... W kazdym razie, latwiej dobrac kolumny na tym poziomie ;-) Pozdrawiam, Kacper Chrapa http://www.edusequence.com/informacje/szkolenia |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.08.2011 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tak.. Wcześniej mi się zgadzało, bo nie miałem jeszcze dwóch kolumn, a teraz do jednej tabeli dodałem i dlatego nie chciało działać... Ale dodałem też do drugiej, z wartościami null i teraz rozróżniam w ten sposób z której tabeli pochodzi rekord..
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 12:58 |