Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] zapytanie - łączenie dwóch tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
psw779
Mam taką strukturę w bazie:

Tabela galleries
id [int (11)]
date [date]
time [time]
name [varchar (150)]

Tabela pictures
id [int (11)]
idg [int (11)]
date [date]
time [time]
title [varchar (150)]

Chciałbym jednym zapytanie wyciągnąć 10 galerii do których ostatnio zostały dodane zdjęcia. Dodam jeszcze, że oprócz ID potrzebuje wyciągnąć jeszcze tytuł ostatnio dodanej fotki więc samo MAX(id) z tabeli pictures nie wystarczy.

Męczę się już z tym sporo i zatrzymałem się mniej więcej na tym że najpierw działa klauzula GROUP BY a potem ORDER BY co uniemożliwia mi posortowanie tego tak jak bym chciał.
skowron-line
A dlaczego trzymasz osobno date i czas w tych tabelach questionmark.gif jest pole datetime, takie rozwiązanie utrudnia takie zapytanie jak ostatnio dodane
psw779
Jest to stosunkowo dawno stworzona baza, teraz już bym zrobił to inaczej. Potrzebuje poprawić na szybko a grzebanie się z modyfikacją pól nie wchodzi w grę. Pomóżcie winksmiley.jpg
JoShiMa
użyj w zapytaniu klauzuli join
psw779
@JoShiMa - Szanujmy się... tyle to się nie trudno domyślić
thek
To ja zadam pytanie... Chodzi po prostu o 10 galerii do jakich dodano zdjęcie bez sprawdzania kiedy to było, czy może jakaś inna wariacja w stylu: pobrać id i nazwy maksymalnie 50 zdjęć z maksymalnie 10 galerii, gdzie data dodania zdjęcia nie jest dalsza niż tydzień. Jak widzisz, na razie twoje pytanie może być wieloznaczne smile.gif
Bo nie sądzę, żeby
  1. SELECT * FROM ( SELECT max(p.id) AS photo_id, g.* FROM pictures p LEFT JOIN galleries g GROUP BY g.id) pid LEFT JOIN pictures p ON pid.photo_id = p.id ORDER BY p.date DESC LIMIT 10
Ale zawsze mogę się mylić smile.gif
Tak by to było rozwiązane jako -> 10 galerii, według tego kiedy było dodane do nich ostatnie zdjęcie. A przynajmniej tak odebrała zapewne większość Twoje pytanie.
Jeśli jednak myślisz, że ma to być wyszczególnienie galerii, które zawierają 10 najnowszych zdjęć to zapytanie wygląda tak:
  1. SELECT * FROM ( SELECT * FROM pictures ORDER BY date LIMIT 10 ) p LEFT JOIN galleries g ON p.idg = g.id GROUP BY g.id HAVING MAX(p.date)
Czy coś w ten deseń winksmiley.jpg Bądź dokładny w tym co chcesz uzyskać bo inaczej zapytań mozemy wymyślać przynajmniej kilkanaście wersji.
psw779
Dzięki thek, dzięki Tobie zrobiłem co potrzebowałem. Koniec tematu
JoShiMa
Cytat(psw779 @ 27.08.2009, 22:36:40 ) *
@JoShiMa - Szanujmy się... tyle to się nie trudno domyślić


No właśnie przez szacunek do Ciebie i wiarę w to, że potrafisz korzystać z dokumentacji (w tym wypadku manual MySQL) i znaleźć w nim przykład stosowania klauzuli join, nie napisałam Ci gotowca na to dość prymitywne zapytanie. To tylko dwie tabele z jednym kluczem obcym 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.