Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] Liczenie jednakowych wynikow
Forum PHP.pl > Forum > PHP
Yasieq
Heja!

Zalozmy, ze mam skrypt, ktory wyrzuca mi wyniki z bazy sortowane wedlug danego pola (tutaj np owoce, ktore moze przyjac wartosci: jablko, gruszka, truskawka, malina).

Z jakiego zapytania skorzystac, aby nie sortowal mi wynikow alfabetycznie, lecz w kolejnosci, np gruszka, malina, truskawka, jablko?

EDIT: Pytanie z tytulu threada znajduje sie pod postem itsme.
itsme
dodaj jeszcze jedna kolumne gdzie bedziesz wstawiac cyferke z zakresu od 1-100 lub innego gdzie okreslisz "wagę" owoca i wg tego pola wykonaj sortowanie
Yasieq
Ok... dzieki... to juz wykorzystam ten thread do zadania jeszcze jednego pytania.

Mam taki skrypcik, ktory pobiera mi z bazy marke i model samochodu i wypisuje to bez zbednych bajerow w petli.

[php:1:cf5331cc27]<?php
$query = "SELECT marka, model FROM baza WHERE accept='done' ORDER BY marka";
$do = mysql_query($query);
while ($row = mysql_fetch_array($do))
{
$marka = $row['marka'];
$model = $row['model'];
print ("$marka <b>$model</b><br><br>");
}
?>[/php:1:cf5331cc27]

Jednak mam problem tego typu, ze jezeli gdyby w bazie istnialy dwa wpisy o tej samej marce i modelu printowal wyniki tej postaci, np:

Audi RS4 x 3 - gdzie trojka jest iloscia wpisow Audi RS4.

Probowalem to zrobic dodajac do zapytania COUNT(marka,model) AS count, jednak powodowalo to wysypanie sie parsera. Please help.
Jabol
robisz to tablicą
[php:1:7dbf77bff4]<?php
$query = "SELECT marka, model FROM baza WHERE accept='done' ORDER BY marka";
$do = mysql_query($query);
while ($row = mysql_fetch_array($do))
{
if(!isset($tablica[$row['marka']][$row['model']])){
$tablica[$row['marka']][$row['model']]=1;
}
else{
$tablica[$row['marka']][$row['model']]++;
}
}
foreach($tablica as $marka){
foreach($marka as $model){
print ("{$marka['key']} <b>{$model['key']}</b> x {$model['value']}<br><br>");
}
}
?>[/php:1:7dbf77bff4]
I takim oto kodem możesz se to zrobić
itsme
moze tak
[php:1:88b0a4db13]<?php
$query = "SELECT DISTINCT (marka, model) FROM baza WHERE accept='done' ORDER BY marka";

$query = "SELECT DISTINCT marka, DISTINCT model FROM baza WHERE accept='done' ORDER BY marka";
/*to sa dwa probne pytania zobacz ktore bedzie dzialac jezeli wogole nie bedzie dzialac to rozwiazanie masz ponizej*/
$do = mysql_query($query);
while ($pojazd= mysql_fetch_object($do))
{
print ("$pojazd->marka<b>$pojazd->model</b><br><br>");
}
?>[/php:1:88b0a4db13]
inne rozwiazanie
[php:1:88b0a4db13]<?php
$query = "SELECT DISTINCT marka FROM baza WHERE accept='done' ORDER BY marka";
$do = mysql_query($query);
while ($marka= mysql_fetch_object($do))
{
$query2 = "SELECT DISTINCT model FROM baza WHERE accept='done' and marka='$marka->marka' ORDER BY model";
$do2 = mysql_query($query2);
while ($model= mysql_fetch_object($do2))
{
print ("$marka->marka<b>$model->model</b><br><br>");
}
}
?>[/php:1:88b0a4db13]

pozniej pokaz jak to rozwiazales
Yasieq
Zaskoczyl pierwszy skrypt itsme - dzieki smile.gif Jednak, to jeszcze nie koniec moich bojow - potrzebuje teraz zrobic zliczanie jednakowych wynikow. Probowalem w petli dodac drugie query, skrypt wyglada tak:

[php:1:9ea902b028]
$query = "SELECT DISTINCT marka, model FROM baza WHERE accept='done' ORDER BY marka";
$do = mysql_query($query);
while ($row = mysql_fetch_array($do))
{
$marka = $row['marka'];
$model = $row['model'];
$query2 = "SELECT marka, model FROM baza WHERE accept='done' AND marka='$marka' AND model='$model'";
$do2 = mysql_query($query2);
print ("$marka <b>$model</b><br><br>");
}
[/php:1:9ea902b028]
Jednak po zdefiniowaniu wynikow $do2 jako mysql_affected_rows w celu policzenia ilosci jednakowych wpisow skrypt znowu sie wysypuje.
itsme
ok
uwaga 1 jezli mowisz blad napisz jaki !!
uwaga 2 jezeli w bledzie podany nr linii w ktorej ten blad wyskakuje to pokaz te linie lacznie z 3-4 wyzej
Yasieq
Blad jest taki:

Cytat
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in /home/users/sss/public_html/samochody.php on line 13


Pojawia sie on pod kazdym wypisanym samochodem, czyli query jest wykonywane zgodnie z petla (?)

Natomiast linijka 13 i wczesniejsze wygladaja tak (13 to ostatnia)

[php:1:1e896de949]
$marka = $row['marka'];
$model = $row['model'];
$query2 = "SELECT marka, model FROM baza WHERE accept='done' AND marka='$marka' AND model='$model'";
$do2 = mysql_query($query2);
$num = mysql_affected_rows($do2);

[/php:1:1e896de949]
Reszta jest tak jak w moim poscie wyzej.
Yasieq
Sorki za repost, ale sprawa mozna by powiedziec pali mi sie pod nogami, a ja utknalem w tym martwym punkcie sad.gif Please help.
KaMeLeOn
mysql_query() zwraca identyfikator wyniku, a nie połączenia...
Więc nie...
[php:1:cfa613ac0d]<?php
$num = mysql_affected_rows($do2);
[/php:1:cfa613ac0d]
TYLKO ID_POŁACZENIA...
[php:1:cfa613ac0d]<?php
$num = mysql_affected_rows($conn);
[/php:1:cfa613ac0d]
BTW. $conn jest zwracane przez mysql_connect();
Yasieq
Nie rozumiem 8O Przeciez jak w affected rows dam wynik mysql_connect to wyjda bzdury. Poza tym twoj post nie dal mi odpowiedzi na moj problem sad.gif
KaMeLeOn
To ty zanim napiszesz bzdury zaglądnij do manuala...
Cytat
int mysql_affected_rows ( [resource identyfikator_połączenia] )

mysql_affected_rows() zwraca ilość wierszy przetworzonych w ostatniej operacji INSERT, UPDATE lub DELETE na serwerze skojarzonym z podanym identyfikatorem połączenia. Jeżeli identyfikator połączenia nie został podany, domyślnie wykorzystywane jest ostatnie połączenie otwarte przez mysql_connect().  


A poza tym kolego...
Cytat
mysql_affected_rows() nie ma zastosowania do operacji SELECT, lecz tylko do operacji, które modyfikują rekordy. Aby uzyskać liczbę wierszy zwróconych przez SELECT, użyj funkcji mysql_num_rows().


Więc zanim napiszesz, że nie mam racji lub pisze bzdury doczytaj i zastanów się... angrysmiley.gif
Yasieq
Spokojnie, nie napisalem nigdzie, ze piszesz bzdury, przeczytaj mojego posta jeszcze raz. Dzieki za pomoc!
KaMeLeOn
Miałem nerwowy dzień...
scanner
Za dużo żartów przeżyłeś? tongue.gif
uboottd
No wiecie co...

SELECT marka, model, count(model) as ilosc FROM baza WHERE accept='done' GROUP BY marka,model ORDER BY marka

Ale kody zeby to zrobic w phpie sa ladne winksmiley.jpg
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.