Selectarea inregistrarilor si returnarea numarului total

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

Selectarea inregistrarilor si returnarea numarului total

Mesajde ialexs » Mar Oct 11, 2011 1:02 pm

salut, am si eu o problema si nu stiu cum sa o fac. am 2 tabele:
tabelul 1
id cheie titlu
1 ca e craciun
2 cr e primavara
tabelul 2
id cheie denumire
1 ca carte albastra
2 cr carte rosie
cam in mare acestea sunt tabele mele. si eu vreau ca sa imi puna selecteze toate inregistrarile din tab 1 si sa imi numere cate inregistari sunt in total la fiecare carte in parte.
am facut ceva de genu

Cod: Selectaţi tot

$query="SELECT (SELECT COUNT(*) FROM categorie) AS subcount FROM cantari_ppt WHERE cantari_ppt.categoria = categorie.cheie";

dar nu merge. am incercat si cu inner join si tot nu merge si cum se preia ca sa se afiseze rezultatele.
astept raspuns, multumesc anticipat, cu stima trif



theramore
PHPRomania Supporter
Mesaje: 12
Membru din: Lun Aug 22, 2011 4:04 pm
Localitate: Slobozia
Contact:

Mesajde theramore » Mar Oct 11, 2011 2:31 pm

Cred ca ai nevoie de ceva in genul:

Cod: Selectaţi tot

$query = mysql_query("SELECT * FROM nume_tabel ");
$numar = mysql_num_rows($query);
echo $numar; //Afiseaza numarul de randuri din baza de date

si pentru afisarea valorilor:

Cod: Selectaţi tot

while($row = mysql_fetch_array($query)){
echo $row['nume_camp'];
}

Avatar utilizator
ispas
Senior Member
Mesaje: 655
Membru din: Mar Sep 14, 2010 1:35 pm
Localitate: Craiova
Contact:

Mesajde ispas » Mar Oct 11, 2011 3:14 pm

eu nu prea am inteles,care e legatura dintre tabelul 1 si tabelul 2?si ce anume sa contorizeze?pune si tu toata constructia tabelelor,si fi putin mai explicit
Ultima oară modificat Mar Oct 11, 2011 3:16 pm de către ispas, modificat 1 dată în total.

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

Mesajde ialexs » Mar Oct 11, 2011 3:14 pm

salut, ceea ce vreau eu este preluarea din ambele tabele informatia si puse ca un rezultat. de exemplu:
Mihai Eminescu ---- 2 carti
Ion Creanga ---- 6 carti
nr de carti il preia din tab 1 numarand randurile unde "tab1.cheie" este egal "tab2.cheie" din tab 2. si cheia din tab 2. si Mihai Eminescu se preia din tab 2 cand se face egalitatea dintre chei.
faza este ca in tab 1 am cheia "em" care in tab 2 cheia este tot "me" dar me=Mihai Eminescu. din cate stiu eu se face cu inner join dar faza este ca nu stiu chiar cum. am tot incercat dar tot nu merge. multumesc pentru raspuns. asptept raspuns. cu stima trif

Avatar utilizator
ispas
Senior Member
Mesaje: 655
Membru din: Mar Sep 14, 2010 1:35 pm
Localitate: Craiova
Contact:

Mesajde ispas » Mar Oct 11, 2011 3:20 pm

ai incercat select count cu union? // eu tot sunt in ceata,deci tabelul 1 si tab2 au in comun campul `cheie`, nu?pai atunci daca vrei sa-l contorizezi pe 'eminescu'

Cod: Selectaţi tot

$cheie = "em";
Mihai Eminescu - mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM tabel_2 WHERE cheie='".$cheie."'"));
Ultima oară modificat Mar Oct 11, 2011 3:27 pm de către ispas, modificat de 3 ori în total.

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

Mesajde ialexs » Mar Oct 11, 2011 3:22 pm

nu am incercat ca nu stiu cum sa le leg. daca sti tu poti te rog sa imi scri cum se face. multumesc. cu stima trif

Avatar utilizator
zeuscool
Senior Member
Mesaje: 250
Membru din: Mie Sep 05, 2007 10:59 am
Localitate: Constanta
Contact:

Mesajde zeuscool » Mar Oct 11, 2011 5:04 pm

select * from tabel1 as t1 right join tabel2 as t2 on (t1.cheie = t2.cheie) where t1.id = un_id and t2.nume = 'Gigi Kent' limit $limita

sper ca ai inteles

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

Mesajde ialexs » Mar Oct 11, 2011 8:54 pm

multumesc de raspuns dar nu este exact ceea ce imi trebuie. mai explic inca o data ce am eu si ceea ce doresc dar nu stiu cum sa fac.
am 2 tabele:
tab 1
capul de tabel ---> id ---- denumire_poezie ----- cheie
inregistrare -------> 1 ---- poezie1 ---------------- a1
inregistrare -------> 2 ---- poezie2 ---------------- a2
inregistrare -------> 3 ---- poezie3 ---------------- a2
inregistrare -------> 4 ---- poezie4 ---------------- a1
inregistrare -------> 5 ---- poezie5 ---------------- a1
inregistrare -------> 6 ---- poezie6 ---------------- a1
inregistrare -------> 7 ---- poezie7 ---------------- a2
.
.
.
inregistrare -------> n ---- poezie_n ---------------- an

tab 2
capul de tabel ---> id ---- denumire_autor----- cheie
inregistrare -------> 1 ---- autor1 ---------------- a1
inregistrare -------> 2 ---- autor2 ---------------- a2
.
.
.
inregistrare -------> n ---- autor_n ---------------- an

ceea ce imi trebuie mie este urmatorul rezultat:
autor1 ----- 4 poezi
autor2 ----- 3 poezi

in functie de cheie imi afiseaza autorul si adunarea randurilor care se face cu COUNT se face doar din tab1. DIN TAB2 SE PREIA DOAR AUTORUL CA SA NU SE PUNA ACEA CHEIE DIN TAB1. cred ca se intelege de data acesta ceea ce doresc si daca stiti va rog sa ma ajutati. multumesc mult pt fiecare care a incercat sa raspunda dar nu a inteles. astept raspuns. cu stima trif

Avatar utilizator
ispas
Senior Member
Mesaje: 655
Membru din: Mar Sep 14, 2010 1:35 pm
Localitate: Craiova
Contact:

Mesajde ispas » Mar Oct 11, 2011 9:21 pm

e exact ce ti-am zis mai sus,daca citeai cu atentie ,deci eu zic ca vine asa:
ai autorul '$autor1' :

Cod: Selectaţi tot

/*scoatem cheia autorului */
$cheie = mysql_fetch_row(mysql_query("SELECT cheie FROM tabel_2 WHERE denumire_autor = '$autor1'"));

/*am scos cheia,pe baza acesteia adunam toate rezultatele din tabelul_1*/

$rezultate_tabel_1 = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM tabel_1 WHERE cheie='$cheie[0]'"));

/*am scos si rezultatele,acum le 'imbinam' */


echo "$autor1   - $rezultate_tabel_1[0] poezii <br/>";

sper ca asta vrei ca daca nu ,ma spanzur :D
:D

Avatar utilizator
zeuscool
Senior Member
Mesaje: 250
Membru din: Mie Sep 05, 2007 10:59 am
Localitate: Constanta
Contact:

Mesajde zeuscool » Mar Oct 11, 2011 9:50 pm

Nu am incercat varianta de mai sus, nu zic ca nu este buna, insa asta merge 100%, am testat eu:

select t2.denumire_autor, (select count(*) from tab1 as t1 where t1.cheie = t2.cheie) as numar_poezii from tab2 as t2

Lasa un mesaj daca te-a ajutat.

Avatar utilizator
ispas
Senior Member
Mesaje: 655
Membru din: Mar Sep 14, 2010 1:35 pm
Localitate: Craiova
Contact:

Mesajde ispas » Mar Oct 11, 2011 9:52 pm

zeus am vrut sa-i arat si eu aceeasi varianta ca a ta :D:D ,dar am zis ca il bag in ceata si mai rau :D ! sa speram ca se descurca...

Avatar utilizator
zeuscool
Senior Member
Mesaje: 250
Membru din: Mie Sep 05, 2007 10:59 am
Localitate: Constanta
Contact:

Mesajde zeuscool » Mar Oct 11, 2011 10:05 pm

daca ambele sunt bune, alege el pe care crede ca ii vine mai usor :)

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

Mesajde ialexs » Mie Oct 12, 2011 10:28 am

salut, multumesc pentru raspuns dar imi da eroarea ca nu gaseste nici un rezultat:

Cod: Selectaţi tot

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in... linia 274
si la linia respectiva este

Cod: Selectaţi tot

$num=mysql_num_rows($result);

mai jos am codul care il folosesc:

Cod: Selectaţi tot

$query="select categorie.denumire_categorie, (select count(*) from cantari_ppt as cantari_ppt where cantari_ppt.cheie = categorie.cheie) as numar_poezii from categorie as categorie";
$result=mysql_query($query);
$num=mysql_num_rows($result);
echo '<br>';
  echo $query;
  $clsnr = 0;      // variabila cu numar ce va fi folosit la alternare /modificare nume clasa css
$tabel = '<table border="0" width="550" cellspacing="0" cellpadding="0"><tr><td>Denumire cantare</td></tr>';
$i=0;
while ($i < $num) {
  $rand=mysql_fetch_array($result);
  $clasa = 'cls'.$clsnr;     
   $tabel .= '<tr class="'. $clasa. '"/> <td>'.$rand['denumire_categorie'].' '.$rand['categorie'].'<br> </td></tr>';
  $i++;
  $clsnr = $i%2;
}
$tabel .= '</table>'; 
echo $tabel;
nu stiu de ce nu imi merge ca am facut cum ati zis la amandoi.
mai sus este a doua varianta.
in continuare fac prima varianta si imi da tot eroarea de mai sus dar la linia 293 la ea fiind codu acesta

Cod: Selectaţi tot

 $rezultate_tabel_1 = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM cantari_ppt WHERE categoria='$cheie[0]'"));
si mai jos am pus codul cum am eu (am schimbat denumirile la bd)

Cod: Selectaţi tot

$cheie = mysql_fetch_row(mysql_query("SELECT cheie FROM categorie WHERE denumire_categorie = '$autor1'"));
 /*am scos cheia,pe baza acesteia adunam toate rezultatele din tabelul_1*/
 $rezultate_tabel_1 = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM cantari_ppt WHERE categoria='$cheie[0]'"));
 /*am scos si rezultatele,acum le 'imbinam' */
 echo "$autor1   - $rezultate_tabel_1[0] poezii <br/>";
. nu stiu ce sa ii fac. va rog ajutati-ma. va multumesc pentru ca pana acum v-ati straduit. poate eu nu am inteles si de aceea nu merge. astept raspuns. cu stima trif

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

Mesajde ialexs » Mie Oct 12, 2011 11:03 am

dupa mari modificari am reusit sa ii dau de cap dar nu 100%. am facut asa:

Cod: Selectaţi tot

$cheie = mysql_fetch_row(mysql_query("SELECT cheie FROM categorie WHERE denumire_categorie = 'Carte Albastra'"));
 /*am scos cheia,pe baza acesteia adunam toate rezultatele din tabelul_1*/
 $rezultate_tabel_1 = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM cantari_ppt WHERE categoria='$cheie[0]'"));
 /*am scos si rezultatele,acum le 'imbinam' */
 echo "Carte Albastra   - $rezultate_tabel_1[0] poezii <br/>";

cum fac ca sa nu ii dau eu ceea ce sa facute ci sa imi preia automat. imi merge daca scriu eu de fiecare data cate o inregistrare din bd. cum este mai sus. cum fac ca sa imi preia automat fiecare in parte. stiu ca se face cu "while" dar nu stiu cum sa ii fac sintaxa la codul acesta. daca nu este prea greu se poate combina codul acesta cu cel de mai sus pe care il folosesc deoarece acel cod imi da un tabel "zebra" si as dori ca in continuare sa am acel tabel "zebra". multumesc mult pentru raspuns, astept raspuns. cu stima trif

quadmachine
Senior Member
Mesaje: 807
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Mesajde quadmachine » Mie Oct 12, 2011 11:13 am

Daca pui asa iti functioneaza?

Cod: Selectaţi tot

$cheie = mysql_fetch_row(mysql_query("SELECT cheie FROM categorie WHERE denumire_categorie = '".$autor1."'"));

Am observat ca variabila autor1 ai puso in quote simple ,asa am pus si eu o sesiune/variabila si nu stiam ce are de nu o ia.

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 25 vizitatori