Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwa rozne MAX() na jednym polu w jednym zapytaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
mongea
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
kefirek
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
mongea
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)
kefirek
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
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.