Selectare mai multe tabele din mysql fara relationare

Incerc sa extrag din doua tabele diferite date diferite care nu au niciun fel de relatie intre ele.
Am doua interogari diferite fara niciun fel de relationare intre ele, as vrea sa le combin intr-o singura interogare. Este posibil?

In momentul asta arata ceva de genul:

//post count
$post_count = $conn->query("SELECT NULL FROM posts");
//comments count
$comments_count = $conn->query("SELECT NULL FROM comments");

Dupa aceea afisez $post_count->num_rows pentru a afisa numarul de articole / comentarii din BD.
Am cautat cazuri asemanatoare dar tot ce am gasit era cu relationare intre tabele pentru INNER JOIN, pe mine nu ma intereseaza asta.

ceva de gen?
SELECT count(t1.* ) AS total_post, count(t2.* ) AS total_comments
FROM posts AS t1, comments AS t2

1 Like

Da, multumesc.
In situatia de fata care solutie ar fi mai buna? Cea pe care o foloseam sus sau ce din postul asta?

$count = $conn->query("SELECT (SELECT COUNT(*) FROM posts) AS count1, (SELECT COUNT(*) FROM comments) AS count2");
$row = $count->fetch_assoc();
	echo $row['count1']; 
	echo "<br>" . $row['count2'];

LE: Am cautat cred ca vreo 4 ore, stiam ca este ceva simplu dar nu stiam ce sa caut…

ca sa vezi care din solutii e mai buna, verifica timpul de executie pentru fiecare interogare in parte (in phpmyadmin de exemplu) si aia cu timp mai mic aia e mai ok (testeaza de mai multe ori ca stii ca mysql are cache)

Am facut “test” cu microtime.
Nu stiu daca intereseaza pe cineva dar am urmatoarele rezultate:

  1. Prima varianta - cea din primul post cu doua interogari(inclusiv cu echo).
    Primul rezultat ar fi de luat in seama, este facuta interogarea dupa oprirea si pornirea MYSQL(xampp)

Total Execution Time: 0.074789047241211 Mins
Total Execution Time: 0.00095105171203613 Mins
Total Execution Time: 0.00070500373840332 Mins
Total Execution Time: 0.00077700614929199 Mins
Total Execution Time: 0.00071001052856445 Mins
Total Execution Time: 0.0006561279296875 Mins

  1. A doua varianta, cea cu interogare in aceeasi linie din postul meu de mai sus

Total Execution Time: 0.056519985198975 Mins
Total Execution Time: 0.0006258487701416 Mins
Total Execution Time: 0.0005638599395752 Mins
Total Execution Time: 0.00062084197998047 Mins
Total Execution Time: 0.00058293342590332 Mins
Total Execution Time: 0.0004880428314209 Mins

$time_start = microtime(true);
for($i=0; $i<1000; $i++){
$count = $conn->query("SELECT ( SELECT COUNT(*) FROM posts ) AS count1, ( SELECT COUNT(*) FROM comments ) AS count2");
$row = $count->fetch_object();
 	echo $row->count1;
 	echo $row->count2;
	break;
	break;
}
$time_end = microtime(true); 
$execution_time = ($time_end - $time_start); 
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';
1 Like

vezi ca si astea sunt cu chichite :smile:

un cod/interogare poate sa ruleze mai repede decat alta varianta scrisa putin diferit dar in schimb sa ocupe mult mai multa memorie decat varianta care ruleaza mai incet dar care va ocupa foarte putina memorie/resurse de lucru.

oricum, daca ajungi sa stai sa testezi fiecare varianta, inseamna ca ai prea mult timp liber la dispozitie :smiley:

eu ma bazez pe experienta, adopt solutia care mi se pare mai optima (atat din punct de vedere al vitezei cat si al ocuparii resurselor)…
zilele trecute am dat peste o problema similara la un cod scris de mine care face backup la fisierele din site si la tabelele din bd (prin cron) si anume ajunsese la un moment dat sa crape din cauza ca papa prea multe resurse… dupa ce am reanalizat codul, mi-am dat seama ca la clasa sql pe care o foloseam uitasem sa dezactivez logurile si memora fiecare query si rezultat iar la o baza de date mare cu multe randuri si tabele, scriptul crapa din lipsa de memorie… am dezactivat logurile la clasa sql si dintr-o data scriptul in loc sa pape 200 mb ram a scazut la 10-20 mb ram :wink:
Dupa cum vezi, e bine sa stii diverse chichite si sa studiezi bine clasele si librariile folosite ca sa stii cand e nevoie de optimizare si cand nu in cadrul proiectului tau. De asemenea si experienta in timp isi spune cuvantul.

1 Like