Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dwa rozne MAX() na jednym polu w jednym zapytaniu
mongea
post 3.03.2009, 13:58:07
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 3
Dołączył: 3.03.2009

Ostrzeżenie: (0%)
-----


Witam

taka sytuacja:
- sprzedawcy moga skladac w roznym czasie wiele propozycji cenowych na dany towar (moga tez nie zaproponowac zadnej ceny), struktura w uproszczeniu

tabela Oferta:
id_oferta, id_towar, id_sprzedawca, cena, data

tabela Towar:
id_towar, nazwa_towar

tabela Sprzedawca:
id_sprzedawca, nazwisko_sprzedawca

jak zbudowac zapytanie, ktore dla danego sprzedawcy (na wejsciu mamy jego id) poda nam wyniki dotyczace tylko tych towarow na ktore oferty skladal w postaci:
nazwa_towar, dotychczas maksymalna cena danego sprzedawcy na ten towar, nazwisko danego sprzedawcy, maksymalna cena na ten towar sposrod wszystkich sprzedawcow, nazwisko sprzedawcy ktory zaproponowal najwyzsza cene

uff
da sie to jednym zapytaniem ?

Mongea
Go to the top of the page
+Quote Post
kefirek
post 3.03.2009, 18:20:18
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


Może tak
  1. SELECT *, MAX(cena) AS ile FROM oferta o
  2. LEFT JOIN towar t ON (o.id_towar=t.id_towar)
  3. LEFT JOIN sprzedawca s ON (o.id_sprzedawca=s.id_sprzedawca)
  4. GROUP BY o.id_sprzedawca ORDERY BY ile DESC


A jak nie to podaj kod do wygenerowania tabeli z przykładowymi rekordami to ci zrobię to zapytanie

Ten post edytował kefirek 3.03.2009, 18:21:28
Go to the top of the page
+Quote Post
mongea
post 3.03.2009, 23:02:27
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 3
Dołączył: 3.03.2009

Ostrzeżenie: (0%)
-----


kod do testow:

Kod


-- phpMyAdmin SQL Dump
-- version 3.0.1.1
-- [url="http://www.phpmyadmin.net/"]http://www.phpmyadmin.net[/url]
--
-- Host: localhost
-- Czas wygenerowania: 03 Mar 2009, 22:16
-- Wersja serwera: 5.0.45
-- Wersja PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Baza danych: `mon_test`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `oferta`
--

CREATE TABLE IF NOT EXISTS `oferta` (
  `id` int(11) NOT NULL auto_increment,
  `id_towar` int(11) NOT NULL,
  `id_sprzedawca` int(11) NOT NULL,
  `cena` decimal(10,0) NOT NULL,
  `data` date NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `id_towar` (`id_towar`,`id_sprzedawca`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11;

--
-- Zrzut danych tabeli `oferta`
--

INSERT INTO `oferta` (`id`, `id_towar`, `id_sprzedawca`, `cena`, `data`) VALUES
(1, 1, 1, 5, '2009-03-01'),
(2, 3, 1, 2, '2009-03-02'),
(3, 1, 2, 1, '2009-03-03'),
(4, 2, 5, 7, '2009-03-04'),
(5, 3, 5, 3, '2009-03-05'),
(6, 1, 1, 3, '2009-03-06'),
(7, 2, 4, 6, '2009-03-07'),
(8, 1, 3, 5, '2009-03-08'),
(9, 2, 3, 2, '2009-03-09'),
(10, 4, 1, 8, '2009-03-10');

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `sprzedawca`
--

CREATE TABLE IF NOT EXISTS `sprzedawca` (
  `id_sprzedawca` int(11) NOT NULL auto_increment,
  `nazwisko` varchar(20) NOT NULL,
  PRIMARY KEY  (`id_sprzedawca`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6;

--
-- Zrzut danych tabeli `sprzedawca`
--

INSERT INTO `sprzedawca` (`id_sprzedawca`, `nazwisko`) VALUES
(1, 'Nowak'),
(2, 'Kowalski'),
(3, 'Adamski'),
(4, 'Sikorski'),
(5, 'Bacik');

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `towar`
--

CREATE TABLE IF NOT EXISTS `towar` (
  `id_towar` int(11) NOT NULL auto_increment,
  `nazwa` varchar(20) NOT NULL,
  PRIMARY KEY  (`id_towar`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

--
-- Zrzut danych tabeli `towar`
--

INSERT INTO `towar` (`id_towar`, `nazwa`) VALUES
(1, 'but'),
(2, 'telefon'),
(3, 'kurtka'),
(4, 'rower');




Cytat(kefirek @ 3.03.2009, 18:20:18 ) *
Może tak
  1. SELECT *, MAX(cena) AS ile FROM oferta o
  2. LEFT JOIN towar t ON (o.id_towar=t.id_towar)
  3. LEFT JOIN sprzedawca s ON (o.id_sprzedawca=s.id_sprzedawca)
  4. GROUP BY o.id_sprzedawca ORDERY BY ile DESC


A jak nie to podaj kod do wygenerowania tabeli z przykładowymi rekordami to ci zrobię to zapytanie


grupujesz po id_sprzedawca - tym sposobem uzyskujesz maksymalne ceny danego sprzedawcy sposrod wszystkich towarow (a nie maksima dotyczace danego towaru)

Ten post edytował mongea 3.03.2009, 22:54:25
Go to the top of the page
+Quote Post
kefirek
post 4.03.2009, 09:37:03
Post #4





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


Może coś w ten desen
  1. SELECT *, MAX(maxcena) AS cenamax FROM ( SELECT *, MAX(cena) AS maxcena FROM oferta GROUP BY id_towar
  2. ) AS razem GROUP BY id_sprzedawca
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:19