Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Zapytanie do bazy
Forum PHP.pl > Forum > Przedszkole
gsk
Witam, mam dosyć nietypowy problem z zapytaniem SQL. Otóż chciałem się spytać kolegów czy jest taka możliwość, aby wyświetlić pewną ilość wierszy tylko trochę inaczej.
Wiem, ze można użyć do tego np. LIMIT i taki prosty przykład:
  1. SELECT tabela.*, kupon.id FROM tabela, kupon LIMIT 10 ;

Tylko ja chce wyświetlić to tak, aby pokazywało mi 10 ostatnich kuponów (czyli tak jakby LIMIT po kupon.id tylko takiego czegoś nie ma) z tego przykładowego zapytania, a nie 10 ostatnich wierszy z tego select'a. Jak to najprościej załatwić? Wiem, że mógł bym to zrobić na poziomie php-a, ale mam pytanie czy jest możliwość zrobienia tego za pomocą SQL-a;
Nie wiem czy ktoś mnie zrozumiał smile.gif Wiecie trudno mi o tym mówić tongue.gif
Pozdrawiam i dzięki za rady.
Wykrywacz
  1. SELECT tabela.*, kupon.id FROM tabela, kupon LIMIT 10
;

Po 1. nie masz powiązania pomiędzy tablami, jak chcesz aby współpracowały.

ja proponuje tak
  1. SELECT * FROM tabela WHERE id IN (SELECT id FROM kupon) LIMIT 10


ale musiałbyś pokazać mi strukturę obu tabel aby ci bardziej pomóc, choć powinieneś zastanowić się i spróbować dalej działać samemu.

Kluczem jest aby dać w klauzuli where taki warunek aby wybierało tylko spośród kuponów winksmiley.jpg


Albo jeżeli chcesz zrobić to nie obciążając bazy użyj left joina dla "tabela"

  1. tabela LEFT JOIN kupon ON tabela.jakiś_id = kupon.id
Zyx
Jak chcesz pobrać 10 ostatnich kuponów, to robisz:

Kod
SELECT * FROM kupon ORDER BY id DESC LIMIT 10


A jak potrzebna Ci jest inna tabela, to nie zapomnij o dodaniu jakiegoś warunku na złączenie, gdyż inaczej uzyskasz iloczyn kartezjański zawartości obu tabel.
Wykrywacz
Masz tu pełne, powinno działać tylko dla kuponów. Podstaw se tylko ".jakiś_id" tongue.gif

  1. SELECT tabela.*, kupon.id FROM tabela LEFT JOIN kupon ON tabela.jakiś_id = kupon.id ORDER BY 10
gsk
to jest tylko taki malutki przykład, oczywiście ze są razem powiązane i mam nie tylko 2 tabele ale 5 smile.gif

wyglada to mniej wiecej tak: http://img177.imageshack.us/img177/4800/kuponfb4.jpg

  1. SELECT adds.coupon_id, adds.bet_id, coupons.id AS coupons_id, coupons.date, bets.id, bets.typ AS bets_typ, bets.event_id, events.id, events.name AS events_name, events.meet_id, meets.id, meets.name AS meets_name FROM adds, bets, coupons, events, meets WHERE coupons.id = adds.coupon_id AND adds.bet_id = bets.id AND events.id = bets.event_id AND meets.id = events.meet_id;


i tutaj zapytanie jakie mam teraz. ale to zapytanie mnie satysfakcjonuje bo niby moge wyswietlic wedlug kuponow, ale jak dam LIMIT na 10 a kupon bedzie mial 11 typow to mi przytnie kupon.
Wykrywacz
no to albo where'ujesz, albo left joinujesz, tak aby wyświetlało ci tylko to co ma odzwierciedlenie w tabeli kupony.
gsk
a mogę dawać coś takiego jak join w joinie? jak mam wiecej tabel. bo z tym joinem już próbowałem wcześniej.
Wykrywacz
Pokarz pełnego selecta jakiego do tej pory zrobiłeś. Bo mam wrażenie że odrabiam ci zadanie domowe, zamiast pomóc znaleźć błąd.
gsk
masz parę postów wyżej. za praca domowa jak byś zgadł smile.gif pisze inzynierke
Wykrywacz
To zrób sobie najpierw selecta i zlicz ilość kuponów i potem tą wartość przekaż do limit $ilosc_kuponow
gsk
ale to mi nic nie da smile.gif przynajmiej nie w moim zapytaniu smile.gif
erix
Cytat
Tylko ja chce wyświetlić to tak, aby pokazywało mi 10 ostatnich kuponów (czyli tak jakby LIMIT po kupon.id tylko takiego czegoś nie ma) z tego przykładowego zapytania, a nie 10 ostatnich wierszy z tego select'a. Jak to najprościej załatwić? Wiem, że mógł bym to zrobić na poziomie php-a, ale mam pytanie czy jest możliwość zrobienia tego za pomocą SQL-a;

Skoro piszesz pracę inżynierską, to przejrzenie dokumentacji nie jest chyba problemem?

Dostałeś już wiele sugestii, a tu (czyichś) prac domowych nie odrabiamy; zwłaszcza inżynierskich. Manual, manual i jeszcze raz manual.
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.