Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Łączenie dwóch tabelek w jedną nie działa
Forum PHP.pl > Forum > Przedszkole
blendermen
Witam.
Mam problem z mysql`elem.
Mam dwie identyczne tabele i chcę za pomocą jednego zapytania sql wyświetlić łączony wynik z dwóch tabel. Udało mi się to zrobić ale tylko na testowych tablicach..a na właściwych nie działa i właśnie nie wiem dlaczego. No więc tak:
To są moje testowe tablice:

  1. table1: table2:
  2.  
  3. +-------------------------+ +--------------------------------+
  4. | Name | Name
  5. --------------------------- +---------------------------------
  6. | A | | C |
  7. | B | | D |
  8. | C | | E |

I za pomocą polecenia sql

  1. mysql> SELECT name FROM (SELECT name FROM table1
  2. -> UNION SELECT name FROM table2) A;

Udało mi się poprawnie połączyć te dwie tablice jako jedna:
  1. +------+
  2. | name |
  3. +------+
  4. | A |
  5. | B |
  6. | C |
  7. | D |
  8. | E |
  9. +------+
  10. 5 rows IN SET (0.00 sec)


Ale jak zastosuje ten sam kod sql na moich właściwych już tablicach - zdjecie i zdjecie_poczekalnia, które mają taką samą strukturę nie działa.
Robie na zaliczenie klona demotywatorow. Mam dwie tablice ze zdjeciami (zdjecie i zdjecia_poczekalnia) pierwsza tabela zawiera informacje o zdjeciach
na stronie głownej a druga tabela zawiera informacje o zdjeciach w poczekalni.
Chcę połaczyć obie tabelę żeby każdy użytkownik mogł zobaczyć wszystkie zdjecią ktore wrzucił na strone -i te, które dostały się na stronę główna i te w poczekalni

Poczekalnia:
  1. +----+-----------------------------+--------+-------+-----------------+--------------------------+
  2. | id | zdjecie | userid | ocena | opis | DATA |
  3. +----+-----------------------------+--------+-------+-----------------+--------------------------+
  4. | 74 | obrazki/goldenbridge.jpg | 1 | 0 | Golden Bridge | 2013-11-20 15:26:57 |
  5. +----+--------------------------+--------+-------+---------------+-------------------------------+
  6. | 75 | obrazki/gladiator.jpg | 1 | 0 | Gladiator | 2013-11-20 15:29:57 |
  7. +----+-----------------------------+--------+-------+------------------+--------------------------+


Strona główna:
  1. +----+-------------------------------+--------+-------+-----------------+-------------------------------+
  2. | id | zdjecie | userid | ocena | opis | DATA |
  3. +----+-------------------------------+--------+-------+-----------------+--------------------------------+
  4. | 11 | obrazki/kaczor_donald.jpg | 1 | 0 | kaczka | 2013-10-20 15:26:57 |
  5. +----+-------------------------------+--------+-------+------------------+-------------------------------+
  6. | 12 | obrazki/ford.jpg | 1 | 0 | samochod | 2013-09-20 15:29:57 |
  7. +----+--------------------------------+--------+-------+-----------------+-------------------------------+
  8. | 14 | obrazki/rower.jpg | 0 | 0 | rower | 2013-08-20 15:29:57 |
  9. +----+--------------------------------+--------+-------+-----------------+-------------------------------+



A chcę uzyskać taki wynik dla usera=1

  1. +---+-------------------------------+--------+-------+------------------+---------------------------------+
  2. | id | zdjecie | userid | ocena | opis | DATA |
  3. +----+------------------------------+--------+-------+------------------+--------------------------------+
  4. | 74 | obrazki/goldenbridge.jpg | 1 | 0 | Golden Bridge | 2013-11-20 15:26:57 |
  5. +----+------------------------------+--------+-------+-------------------+-------------------------------+
  6. | 75 | obrazki/gladiator.jpg | 1 | 0 | Gladiator | 2013-11-20 15:29:57 |
  7. +----+------------------------------+--------+-------+-------------------+-------------------------------+
  8. | 11 | obrazki/kaczor_donald.jpg | 1 | 0 | kaczka | 2013-10-20 15:26:57 |
  9. +----+-------------------------------+--------+-------+------------------+-------------------------------+
  10. | 12 | obrazki/ford.jpg | 1 | 0 | samochod | 2013-09-20 15:29:57 |
  11. +----+--------------------------------+--------+-------+-----------------+---------------------------------+


Tylko, że jak wpisze
mysql> SELECT zdjecie FROM (SELECT zdjecie FROM zdjecia UNION SELECT zdjecie FROM zdjecia_pocz) A;
to otrzymuje błąd:
ERROR 1271 (HY000): Illegal mix of collations for operation 'UNION'
Przeszukałem całe google i nie mogę znaleźć informacji na ten temat.
Przepraszam za te rozjechane - nieczytelne tabelki. W moim edytorze postu są równo i nie wiem jak je wyrównać
Pozdrawiam.
nospor
Pola tekstowe w obu tabelach masz w innym kodowaniu. Blad mowi o tym dosc wyraznie wink.gif

A tak na marginesie:czemu robisz z tego dwie tabele? Nie lepiej jedna oraz kolumna POCZEKALNIA ?
blendermen
Robię dwie tabele ponieważ chcę żeby zdjęcia, które czekają w poczekalni po zatwierdzeniu były przenoszone do pierwszej tabeli jako nowe wpisy i wyświetlane na pierwszej stronie ponieważ wczytuje zdjęcia od dołu do góry z tabeli. Jeżeli wrzuciłbym wszystko do jednej i po na przykład roku czasu odhaczył zmienną poczekalnia z 1 na 0 zdjęcie byłoby gdzieś tam daleko na n-tej stronie. Tak to rozwiązałem ale myślę, że dałoby się to zrobić tak jak mówisz ale musiałbym zmienić algorytm wczytywania zdjęć. wink.gif

Robiłem takie same kodowanie na obu tablicach. To złe kodowanie może taki błąd pokazywać? jak to naprawić?
Dokładnie mam takie tabelki:
  1. mysql> SHOW FULL COLUMNS FROM zdjecia;
  2. +---------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
  3. | FIELD | Type | Collation | NULL | KEY | DEFAULT | Extra | Privileges | Comment |
  4. +---------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
  5. | id | int(10) UNSIGNED | NULL | NO | PRI | NULL | AUTO_INCREMENT | SELECT,INSERT,UPDATE,REFERENCES | |
  6. | zdjecie | char(70) | utf8_general_ci | NO | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  7. | userid | int(50) | NULL | NO | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  8. | ocena | int(50) | NULL | NO | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  9. | opis | varchar(255) | utf8_general_ci | YES | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  10. | DATA | datetime | NULL | YES | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  11. +---------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
  12. 6 rows IN SET (0.00 sec)
  13.  
  14. mysql> SHOW FULL COLUMNS FROM zdjecia_pocz;
  15. +---------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
  16. | FIELD | Type | Collation | NULL | KEY | DEFAULT | Extra | Privileges | Comment |
  17. +---------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
  18. | id | int(50) | NULL | NO | PRI | NULL | AUTO_INCREMENT | SELECT,INSERT,UPDATE,REFERENCES | |
  19. | zdjecie | char(70) | utf8_unicode_ci | NO | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  20. | userid | int(50) | NULL | NO | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  21. | ocena | int(50) | NULL | NO | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  22. | opis | varchar(255) | utf8_unicode_ci | YES | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  23. | DATA | datetime | NULL | YES | | NULL | | SELECT,INSERT,UPDATE,REFERENCES | |
  24. +---------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
  25. 6 rows IN SET (0.00 sec)
  26.  

i faktycznie są inne. Poprawie i dam znać czy działa wink.gif
nospor

Cytat
Robiłem takie same kodowanie na obu tablicach.

Naprawde nie widzisz roznicy??

utf8_general_ci
utf8_unicode_ci



Cytat
Jeżeli wrzuciłbym wszystko do jednej i po na przykład roku czasu odhaczył zmienną poczekalnia z 1 na 0 zdjęcie byłoby gdzieś tam daleko na n-tej stronie.
A jaki problem podczas zmiany z 1 na 0 zmieniac rowniez date na aktualną? Naprawde latwiej ci jest przerzucac rekord z jednej tabeli do drugiej niz zmienic date w jednym polu?
blendermen
Dziękuje za odpowiedź. Działa smile.gif
Dopiero jestem początkujący w php/mysql
Gdybym miał robić tę stronę tak jak powinna wyglądać dobrze zaprojektowana strona to musiałbym wszystko od poczatku pisać biggrin.gif
Pozdrawiam.
nospor
Robisz zdaje sie to na zaliczenie... jak ci troja pasuje to twoja sprawa smile.gif
blendermen
Tak, ta strona jest na zaliczenie przedmiotu "Aplikacje internetowe". Będę musiał zrobić jeszcze jedną na licencjata i faktycznie będę musiał pomyśleć nad logicznym rozpracowaniem działania strony. Teraz jakbym Wam pokazał kod tego klona demotów to podejrzewam, że złapalibyście się za głowę. Masa kodu, na samych funkcjach, żadnego obiektowego.. miałem napisać podstawową stronę żeby działała i przepisać wszystko na obiektowy ale teraz sam już się gubię w tym kodzie wink.gif
A niech będzie trója tongue.gif
ale mam przynajmniej dużo frajdy z pisania mojego "pseudo-kodu" php serio jest wciągające smile.gif
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.