Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połączenie wyniku selecta wzgledem id
Forum PHP.pl > Forum > Bazy danych
KotWButach
Witam, mam prośbę czy ktoś wie jak można połączyć wynik po ID?
  1.  
  2. SELECT * FROM `wp_postmeta` WHERE `meta_key` = 'date_uninstall' OR `meta_key` = 'date_install'
  3.  



Wynik takiego zapytania:


id_date | meta_key | somethingelse
35 | date_uninstall | 1234123423
... | ... | ...
35 | date_install | 989024234




Chciałbym by te dane się połączyły pod innymi nazwami tabel.

35 date_uninstall 1234123423 date_install 989024234

Czy tak się da?
leonpro778
Da się. Chyba tak na szybko to przychodzi mi INNER JOIN. Rozumiem, że wszystko jest w JEDNEJ tabeli czy jest kilka tabel?
KotWButach
To jest jedna tabela, więcej jedna kolumna sad.gif

udało mi się coś takiego ale mam kilkukrotnie więcej wyników sad.gif bo bierze zbyt dużo rekordów... W zasadzie to mam wrażenie mam o kilkaset rekordów za dużo... zamiast kilku.
  1. select `end_date`, `certyficate_date`
  2. from `wp_postmeta`
  3. inner join (SELECT `meta_value` AS `end_date`, `post_id` AS `end_id` FROM `wp_postmeta` WHERE `meta_key` = 'date_uninstall_certyficate') AS A
  4. inner join (SELECT `meta_value` AS `certyficate_date`, `post_id` AS `cert_id` FROM `wp_postmeta` WHERE `meta_key` = 'id_certyfiacte') AS B
  5. on A.`end_id` = B.`cert_id`
  6.  
trueblue
Najpierw pokazałeś przykład gdzie pole łączącym wydawało się id_date, a rekordy o tym samym id_date były dwa, jeden z wartością "date_uninstall", drugi z wartością "date_install".
W drugim przykładzie łączysz po end_id i cert_id, a wybierasz z wartością "date_uninstall_certyficate" oraz "id_certyfiacte".

W jakim polu jest wartość łącząca wspólne wartości? Czy wspólne wartości są dwie czy więcej, i jakie to wartości?
KotWButach
Wybaczcie, trochę się po prostu baza zmodyfikowała,

kolumną która jest wspólna to post_id, są tam id postu od wordpress'a a więc zarówno
date_uninstall_certyficate jak i id_certyfiacte spotykają się pod tym samym id. Problem w tym że pobiera mi z 500 rekordów zamiast około 30.
trueblue
Pobierze tyle ile jest rekordów z "date_uninstall_certyficate" razy ilość rekordów z "id_certyficate" - powstaje iloczyn kartezjański. To akurat nie jest nadzwyczajna sytuacja.
Musisz dodać GROUP BY post_id.
KotWButach
Dziękuje smile.gif to naprawdę zadziałało.
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.