Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie złożone
Forum PHP.pl > Forum > Bazy danych > MySQL
shima
Problem jest następujący:
Wyświetlić zawartość rekordu, dla którego wartość w jednej z kolumn jest największa.
Inaczej: znaleźć rekord z maksymalną wartością i wyświetlić.

Użyłem kodu:
[php:1:7f1580520e]<?php
$nowe="select MAX(date) from baza.tabela";
$nowe_do=mysql_query($nowe);
while($wiersz = mysql_fetch_array($nowe_do))
{
print($wierdz['who']);
}
?>[/php:1:7f1580520e]

Ale oczywiście nie działa. sad.gif

mysql 3.23.54a
php 4.2.2

Będę wdzięczny za wskazówki
scanner
[php:1:2109c0dca9]<?php
$nowe="SELECT * FROM baza.tabela ORDER BY date DESC LIMIT 1";
$nowe_do=mysql_query($nowe) or die(mysql_error());
while($wiersz = mysql_fetch_row($nowe_do))
{
// costam
}
?>[/php:1:2109c0dca9]Może tak?
shima
Cytat
Może tak?


Tak, to działa jak sobie życzyłem, ale zależało mi na wyciągnięciu zmiennej na zewnątrz, żeby później móc wydrukować wszystko, co ma wartość mniejszą. A tu już chyba limit mi nie pomoże? A może się mylę?
Generalnie dochodzę do wniosku, ze za bardzo przekombinowałem przy wymyślaniu jak to zrobić, ale nadal nurtuje mnie myśl: Czy mogę tą wartość
MAX(date) przypisać zmiennej php-owej i używać jej później w skrypcie?
scanner
[php:1:956ee3fc2c]<?php
$nowe="SELECT MAX(date) FROM baza.tabela";
$nowe_do=mysql_query($nowe) or die(mysql_error());
$wiersz = mysql_fetch_row($nowe_do); // bez while bo to jeden wiersz
print($wiersz['MAX(date)']);
?>[/php:1:956ee3fc2c]
shima
Cytat
[php:1:c12fa5e6d4]<?php
$nowe="SELECT MAX(date) FROM baza.tabela";  
$nowe_do=mysql_query($nowe) or die(mysql_error());
$wiersz = mysql_fetch_row($nowe_do); // bez while bo to jeden wiersz
print($wiersz['MAX(date)']);  
?>[/php:1:c12fa5e6d4]


To niestety zwraca pusty string. To chyba przez średnik w linii 4. Ale bez średnika i while wywala się. Ale dzięki Twoim sugestiom wpadłem na właściwy trop. Nie wiem, czy najwłaściwszy, ale działa jak chciałem:
[php:1:c12fa5e6d4]<?php
$nowe="SELECT * FROM kfd.sem order by date desc LIMIT 1 ";
$nowe_do=mysql_query($nowe);
while($wiersz = mysql_fetch_array($nowe_do))
{
$zmienna=($wiersz['date']);
}
print($zmienna);
$test="select * from kfd.sem where date='$zmienna'";
$test_do=mysql_query($test) or die(mysql_error());
while($wiersz = mysql_fetch_array($test_do))
{
print $wiersz['topic'];
}

?>[/php:1:c12fa5e6d4]

ale musi być koniecznie mysql_fetch_array, a nie mysql_fetch_row, nie wiem czemu.

Gdyby jednak ktoś miał propozycję usprawnienia, to będę zobowiązany.
Kinool
nie rozumie po co ci te kolejne zapytanie skoro dotyczy tego samego questionmark.gif
skoro zapytanie brzmi

[sql:1:9bf9c2107d]SELECT * FROM kfd.sem order by date desc LIMIT 1[/sql:1:9bf9c2107d]
to pobierane sa wszystkie pola (rekordy) gdzie spelniony jest warunek lub gdzie odpowiada zapytaniu w tym przypadku sortowane sa za pomoca zmiennej date i pobierany 1 z najwieksza wartoscia, znaczek * informuje ze chcesz pobrac wszystkie nie tylko date wiec te zapytanie ponizej jest niepotzrbne bo i tak wszystko masz juz w tablicy $wiersz

tak powinno dzialac:
[php:1:9bf9c2107d]<?php

$nowe="SELECT * FROM kfd.sem ORDER BY date DESC LIMIT 0,1 ";
$nowe_do=mysql_query($nowe) or die(mysql_error());
while($wiersz=mysql_fetch_array($nowe_do)) {
print $wiersz['topic'];
}
?>[/php:1:9bf9c2107d]
shima
Cytat
nie rozumie po co ci te kolejne zapytanie skoro dotyczy tego samego questionmark.gif
skoro zapytanie brzmi


Gdyby chodziło tylko o to, nie byłoby pytania na forum. Napisałem wyżej, że zmienna z rekordu, w którym jest MAX(date) jest mi potrzebna później, aby móc wykorzystać ją w innych zapytaniach. Stąd cały problem, już, jak napisałem, rozwiązany. Kluczowy jest wiersz 6 w moim kodzie. Reszta faktycznie bez sensu, ale to już nie jest istotne.
Dzięki za zainteresowanie 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.