Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie złożone
shima
post 15.12.2003, 11:13:31
Post #1





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
scanner
post 15.12.2003, 11:23:11
Post #2





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




[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?


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
shima
post 15.12.2003, 11:38:52
Post #3





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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?


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
scanner
post 15.12.2003, 11:51:00
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




[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]


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
shima
post 15.12.2003, 16:39:34
Post #5





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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.


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
Kinool
post 15.12.2003, 22:53:29
Post #6





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

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


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]
Go to the top of the page
+Quote Post
shima
post 16.12.2003, 09:24:36
Post #7





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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


--------------------
Nie ma nic stałego prócz zmiany...
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: 20.07.2025 - 07:18