listare tabele ce indeplinesc o anumita conditie

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

surrogates
PHPRomania Supporter
Mesaje: 8
Membru din: Joi Oct 06, 2011 12:54 pm

listare tabele ce indeplinesc o anumita conditie

Mesajde surrogates » Joi Oct 27, 2011 3:03 pm

intampin urmatoarea problema ...
am o baza de date in care sunt n tabele ce au aceeasi structura, dar numarul acestor tabele mai creste din cand in cand
chiar daca numarul acestora creste, vreau sa afisez doar acele tabele care au o anumita valoare intr-un camp ... sa zicem cele care au in campul camp1 valoarea a
pana acum am reusit sa afisez toate tabelele din acea baza de date, folosind scriptul:

<?php
$dbname = 'test';
if (!mysql_connect('localhost', 'root', '1234')) {
echo 'Could not connect to mysql';
exit;
}
//
$sql = "SHOW TABLES FROM $dbname";
$result = mysql_query($sql);

if (!$result) {
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

//afisare
echo "<table width='200' border='1' align='center'>";
echo "<tr>
<th>Nume tabela</th>
</tr>";

while ($row = mysql_fetch_row($result)) {
echo "<br>";
echo "<tr align='left'><td>";
echo "{$row[0]}";
echo "</td></tr>";
}

echo "</table>";

mysql_free_result($result);
?>

cum pot sa afisez doar acele tabele care ma intereseaza?
multumesc mult



Avatar utilizator
misu
PHPRomania Supporter
Mesaje: 23
Membru din: Joi Sep 01, 2011 2:54 pm
Localitate: Brasov
Contact:

Mesajde misu » Joi Oct 27, 2011 4:35 pm

Cod: Selectaţi tot

while ($row = mysql_fetch_row($result)) {
if($count=mysql_num_rows(mysql_query("SELECT * FROM $row[0] WHERE camp1='a'"))) {
echo "<br>";
echo "<tr align='left'><td>";
echo 'am gasit '.$count.' inregistrari corespunzatoare in tabelul '.$row[0];
echo "</td></tr>";
} else {
echo "<br>";
echo "<tr align='left'><td>";
echo 'nu am gasit inregistrari corespunzatoare in tabelul '.$row[0];
echo "</td></tr>";
}
}


interesanta structura bazei tale de date... :?

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

Mesajde zeuscool » Joi Oct 27, 2011 11:20 pm

interesnat este ca nu stiti html ... ce cauta br in structura la table nu stiu .. dar in fine, o luati ca pe o observatie si invatati sper
Follow me on (Da cu share, like, +1 sau ce mai stii !!!) sau comenteaza articolele, sugereaza etc, FII SOCIAL ... :) marianzburlea.com

surrogates
PHPRomania Supporter
Mesaje: 8
Membru din: Joi Oct 06, 2011 12:54 pm

Mesajde surrogates » Vin Oct 28, 2011 11:35 am

multumesc pt. solutie, insa ... nu am rezolvat problema ...
imi apare eroarea:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\jpgraph\aa.php on line 25

linia 25 este urmatoarea:
if($count = mysql_num_rows(mysql_query("SELECT * FROM $row[0] WHERE time = '-1'"))) {

si afisaza de asemenea mesajul:
nu am gasit inregistrari corespunzatoare in tabelul aaa
cu toate ca am asemenea inregistrai in tabelul aaa

Avatar utilizator
misu
PHPRomania Supporter
Mesaje: 23
Membru din: Joi Sep 01, 2011 2:54 pm
Localitate: Brasov
Contact:

Mesajde misu » Vin Oct 28, 2011 12:20 pm

asta se intampla probabil pentru ca ai in baza de date unul sau mai multe tabele ce nu contin campul time.
prefixeaza acele tabele care au structura identica, ex: tm_tabel, le redenumesti,
apoi selectezi doar tabelele cu "tm_" in fata (unde esti sigur ca exista campul time)
$sql = "SHOW TABLES FROM $dbname LIKE 'tm_%'";

sau poti selecta doar tabelele care contin campul time astfel:
$sql = "SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME IN ('time') AND TABLE_SCHEMA='$dbname'";

surrogates
PHPRomania Supporter
Mesaje: 8
Membru din: Joi Oct 06, 2011 12:54 pm

Mesajde surrogates » Lun Oct 31, 2011 9:23 am

toate tabelele contin campul time ... ideea e ca din n tabele, doar un numar de x tabele au in campul time valoarea -1
inca nu am gasit solutia sa le afisez doar pe cele cu valoarea -1 ...

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

Mesajde quadmachine » Lun Oct 31, 2011 8:32 pm

Cod: Selectaţi tot

time,date


Sunt functii in SQL ,redenumeste campul.

Cod: Selectaţi tot

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

surrogates
PHPRomania Supporter
Mesaje: 8
Membru din: Joi Oct 06, 2011 12:54 pm

Mesajde surrogates » Joi Noi 03, 2011 10:19 am

chiar daca redenumesc cele 2 campuri, obtin aceeasi eroare:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\jpgraph\aa.php on line 25

MihaiA
Average Member
Mesaje: 184
Membru din: Lun Aug 25, 2008 5:33 pm

Mesajde MihaiA » Joi Noi 03, 2011 1:43 pm

arata structura db-ului si ne va fi mai usor sa te ajutam

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

Mesajde quadmachine » Joi Noi 03, 2011 3:50 pm

Nici asa nu iti functioneaza?

[php]
<?php
if($count = mysql_query("SELECT COUNT(`camp`) FROM $row[0] WHERE camp1='a'" )))
?>
[/php]

Cod: Selectaţi tot

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

starlays
PHPRomania Supporter
Mesaje: 26
Membru din: Joi Aug 25, 2011 3:00 pm

Mesajde starlays » Vin Noi 04, 2011 11:05 am

@surrogates păi problema ta e una singură.

Conform semnăturii funcției mysql_num_rows():

Cod: Selectaţi tot

 int mysql_num_rows ( resource $result )


vei observa ca pentru mysql_num_rows() ca să funcționeze va trebui să "hrănești" funcția cu un parametru de tip resursă. Acest parametru de tip resursă îl obții de la: mysql_query() care conform manualului funcția are semnătura:

Cod: Selectaţi tot

resource mysql_query ( string $query [, resource $link_identifier ] )


cu precizarea că:

Cod: Selectaţi tot

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.


ceea ce ne duce cu gândul la parametrul opțional a lui mysql_query():

Cod: Selectaţi tot

[, resource $link_identifier ]


care spune că:

Cod: Selectaţi tot

The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.


Din toate acestea rezultă că probabil tu nu ai o conexiunea către baza de date. Pentru a verifica dacă poți stabili o conexiune cu baza de date testează cu:

Cod: Selectaţi tot

<?php var_dump(mysql_connect('localhost', 'mysql_user', 'mysql_password'));


Dacă vei primi ca output o resursă => că te poți conecta la baza de date dar mysql_query() este pus într-un context în care nu poate avea acces la resursa returnată de mysl_connect() deci va trebui să salvezi această resursă într-o variabilă care să fie vizibilă în contextul în care folosești mysql_query() și să îi dai această resursă lui mysql_query() ca să poată funcția la rândul ei, să returneze resursa aferentă ei către mysql_num_rows() și astfel să scapi de acel warning.

Sper să îți fi fost de ajutor și încearcă să înțelegi foarte bine ceea ce ți-am zis astfel putându-te ajuta pe tine însuți într-un final.

Sfat: Renunță la extensia Mysql, folosește Mysqli în locul ei. Mysql nu mai este folosită de ceva timp.
Spor.

surrogates
PHPRomania Supporter
Mesaje: 8
Membru din: Joi Oct 06, 2011 12:54 pm

Mesajde surrogates » Lun Noi 07, 2011 12:51 pm

mii de multumiri tuturor ...
m-am mai jucat putin cu acel cod si l-am modificat (inclusiv partea de conectare) ...
acum arata asa:

<?php

$id = @mysql_connect("localhost","root","1234");
mysql_select_db("test",$id);

//
$sql = "SHOW TABLES FROM test";
$result = mysql_query($sql);

if (!$result) {
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

//afisare
echo "<table width='200' border='1' align='center'>";
echo "<tr>
<th>Nume tabela</th>
</tr>";

while ($row = mysql_fetch_row($result)) {
if($count = mysql_num_rows(mysql_query("SELECT count('time') FROM $row[0] WHERE time = '-1'", $id))) {
// if($count = mysql_query("SELECT COUNT('time') FROM $row[0] WHERE time='-1'", $id)) {
echo "<br>";
echo "<tr align='left'><td>";
echo 'am gasit '.$count.' inregistrari corespunzatoare in tabelul '.$row[0];
echo "</td></tr>";
} else {
echo "<br>";
echo "<tr align='left'><td>";
echo 'nu am gasit inregistrari corespunzatoare in tabelul '.$row[0];
echo "</td></tr>";
}
}

?>

cu acest cod, obtin urmatorul rezultat:

am gasit 1 inregistrari corespunzatoare in tabelul 1
am gasit 1 inregistrari corespunzatoare in tabelul 2
...

daca folosesc insa linia:
if($count = mysql_query("SELECT COUNT('time') FROM $row[0] WHERE time='-1'", $id)) {
obtin un rezultat de forma:
am gasit Resource id #5 inregistrari corespunzatoare in tabelul 1
am gasit Resource id #6 inregistrari corespunzatoare in tabelul 2
...

e ceva care inca imi scapa ...


Înapoi la “PHP Incepători”

Cine este conectat

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