Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]Pobieranie z tabeli nie działa
Forum PHP.pl > Forum > Przedszkole
indexx
Mam w bazie tabele z artykułami, chciałbym wyświetlić na stronie listę użytkowników i ilość dodanych artykułów.
Tabela nazywa się artykuły
w niej mam rekord dodał i w nim zapisany przy każdym artykule nick osoby która go dodała, obok nicku w kolumnie Rekordów jest ilość dodanych artykułów.
Próbowałem :
Kod
$zapytanie = "SELECT COUNT( * ) AS `Rekordów` , `dodal`
  FROM `artukuły` ORDER BY `dodal`";
  $wykonaj = mysql_query($zapytanie) or Die("Nie działa zapytanie". $zapytanie);
  $ile_rek = mysql_num_rows($wykonaj);


ale nic mi nie wyświetla.
piotrooo89
pokaż strukturę tabel bo tak jak wytłumaczyłeś nic nie można zrozumieć. wydaje mi się że będzie Ci potrzebne DISTINCT. ale pierw pokaż co i jak i wytłumacz poprawnie.
indexx
Struktura tabeli artykuly
Kod
CREATE TABLE `komentarze` (
   `tytul` text NOT NULL,
   `opis` text NOT NULL,
   `img` text NOT NULL,
   `link` text NOT NULL,
   `dodal` text NOT NULL,
   `data` text NOT NULL,
   `cat` text NOT NULL,
   `id` int(11) NOT NULL auto_increment,
   `ile` int(11) NOT NULL default '0',
   `glosy` int(11) NOT NULL default '0',
   `ocena` float NOT NULL default '0',
   `view` int(11) NOT NULL default '0',
   `active` int(11) NOT NULL default '0',
   `tags` text NOT NULL,
   `rss_data` text NOT NULL,
   `dodalid` int(11) NOT NULL default '0',
   `typ` int(11) NOT NULL default '0',
   PRIMARY KEY  (`id`)
);
piotrooo89
tu mówisz o artykułach a podajesz komentarze? i dalej nie wiem co chcesz zrobić? pobrać nazwy użytkowników którzy dodali artykuł i wyświetlić ile tych artykułów dodali?
indexx
Już poprawiłem, pomyliłem się bo pierwotnie tabela nazywała się articles ale zmieniłem na artykuły, a tutaj wpisałem komentarze wstydnis.gif
Tak, chcę na dodatkowej stronie wyświetlić listę użytkowników i obok ilość dodanych przez każdego z nich artykułów.
piotrooo89
zrobiłem coś takiego z palca pisane popraw ewentualne błędy:

  1. <?php
  2. $aut = mysql_query('SELECT DISTINCT(dodal) AS name FROM `komentarze`');
  3.    
  4. while ($row1 = mysql_fetch_array($aut))
  5. {
  6.    $kto = $row1['name'];
  7.    $ilosc = mysql_query("SELECT COUNT(*) AS ile FROM komentarze WHERE dodal='$kto'");
  8.    
  9.    while ($row2 = mysql_fetch_array($ilosc))
  10.    {
  11.        echo 'Kto: '.$kto.' ile: '.$row2['ile'].'<br>';
  12.    }
  13. }
  14. ?>
indexx
Działa świetnie!
Ogromne dzięki!

Mam jeszcze jedno pytanie, w tabeli artykuły mam mam wiersz glosy która wygląda tak

Rekordów glosy
123............... 0
30................. 2
49................. 6
Jak zliczyć sumę oddanych głosów na wszystkie artykuły, bo już nie mam pomysłu, próbowałem tak:
Kod

   $res = mysql_query("SELECT movie count(*) FROM glosy");
     $ile = mysql_num_rows($res);

ale nie działa
piotrooo89
Cytat(indexx @ 22.02.2009, 17:49:28 ) *
Rekordów glosy
123............... 0
30................. 2
49................. 6


nie bardzo rozumiem wytłumacz jak to działa...

Cytat(indexx @ 22.02.2009, 17:49:28 ) *
Jak zliczyć sumę oddanych głosów na wszystkie artykuły


ten problem wynika z tego że musisz wyjaśnić.
kefirek
Chyba coś takiego bedzie
  1. <?php
  2. $wynik = mysql_result(mysql_query("SELECT SUM(glosy) FROM komentarze"),0);
  3. ?>
indexx
Cytat(piotrooo89 @ 22.02.2009, 19:43:52 ) *
nie bardzo rozumiem wytłumacz jak to działa...


W kolumnie 'Rekordów' mam ilość ocenionych materiałów, a w kolumnie głosy ocenę z zakresu 1-6, czyli np na ocenę 6 jest ocenionych 49 materiałów.

Rozwiązanie kefirka dodaje mi zawartość pól ocen, czyli np jeśli 5 artykułów jest ocenionych na 3 to wynik będzie 15, a powinien być 5.

Chyba już dobrze wytłumaczyłem.
piotrooo89
robisz analogicznie. czytasz oceny DISTINCT i później klauzurą WHERE liczysz rekordy.

teraz dostaniesz pseudo kod:

  1. <?php
  2. $sql1 = SELECT DISTINCT(glosy) FROM tabela
  3.  
  4. while ($row($sql1))
  5. {
  6.    $sql2 = SELECT COUNT(*) FROM tabela WHERE glosy=$row[glosy];
  7.    
  8.    while($row2($sql2))
  9.    {
  10.        echo row , row2;
  11.    }
  12. }
  13. ?>
indexx
Coś nie chce mi to wyjść, zrobiłem tak:
Kod
<?php
$sql1 = mysql_query("SELECT DISTINCT(glosy) FROM movie");

while ($row = mysql_fetch_array($sql1))
{
   $sql2 = mysql_query("SELECT COUNT(*) FROM movie WHERE glosy=$row[glosy]");
  
   while($row2 = mysql_fetch_array($sql2))
   {
       echo ''.$row.' , '.$row2.'';
   }
}
?>


Może mi ktoś powiedzieć jak to ma wyglądać?
piotrooo89
daj sobie tu mysql_error i już będziesz wiedział:
  1. <?php
  2. $sql2 = mysql_query("SELECT COUNT(*) FROM movie WHERE glosy=$row[glosy]") or die(mysql_error);
  3. ?>



i popatrz sobie dokładnie na mojego gotowca. jak dalej nie wiesz o co chodzi popatrz jeszcze raz. sprawa jest analogiczna zmieniają się tylko nazwy kolumn tabel.
indexx
Już zrobiłem, wielkie dzięki za pomoc!

Mam jeszcze jedno pytanie, jak uszeregować wynik w kolejności malejącej, próbowałem za pomocą order by ale nie skutkuje?
piotrooo89
ORDER BY rekord ASC lub DESC.
indexx
Niestety, tak jak pisałem zwraca błąd:
Kod
[b]Warning[/b]:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource
piotrooo89
po co pokazujesz sam błąd. pokaż zapytanie.
indexx
Kod
$aut = mysql_query('SELECT DISTINCT(dodal) AS name FROM `artykuly` order by rekord asc LIMIT 10');
  
while ($row1 = mysql_fetch_array($aut))
{
   $kto = $row1['name'];
   $ilosc = mysql_query("SELECT COUNT(*) AS ile FROM artykuly WHERE dodal='$kto'");
  
   while ($row2 = mysql_fetch_array($ilosc))
   {
       echo '<div>Login: '.$kto.' dodanych materiałów: '.$row2['ile'].'</div>';
   }
}
piotrooo89
to był tylko przykład!
  1. ORDER BY rekord ASC


tam gdzie masz rekord wstaw soja kolumnę po której chcesz żeby było sortowane. i jak chcesz malejąco to nie ASC tylko DESC.
ORDER BY
indexx
Nie działa, jak mówiłem, wiem co oznacza asc i desc, wpisałem tylko w kwestii sprawdzenia.
piotrooo89
a powiedz po jakim polu w bazie chcesz sortować. jeśli już będziesz wiedział wpisz je tam gdzie masz teraz wpisane rekord.
indexx
Pole Rekordów, czyli ilości dodanych artykułów.Żadna kombinacja nie działa.
Nie wiem co robię źle.
piotrooo89
wpisz sobie tam id.
indexx
Bez zmian, nadal nie jest w takiej kolejności.
piotrooo89
ale zrozum że musisz podać nazwę kolumny. inaczej tego nie zrobisz. nie wiem jak chcesz to sortować. to Ty musisz sobie odpowiedzieć na to pytanie.
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.