Select subiecte fara raspuns

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
cadou
Mesaje: 328

Select subiecte fara raspuns

Deci am asa 2 tabele mysql intrebari si intrebari-comentarii
in intrebari se afla informatiile

Cod: Selectaţi tot

id auto incremenare
nume  - de cine e postat
categorie 	 - se intelege de la sine
intrebare - se intelege de la sine
adresa - adresa intrebarii
data - data postarii
iar in intrebari-comentarii

Cod: Selectaţi tot

id-  auto incrementare
dela - comentariu de la  xxxxxx
pentru - id-ul intrebarii
comentariu -
data -
Ceea ce nu reusesc sa fac este:
Sa aflu care din intrebari nu au raspuns si sa le afisez + paginare !

- Edit:
Am revenit cu un cod, dar am probleme cu afisarea numerelor la paginare

Cod: Selectaţi tot

<?php 
    $intrebari = "SET NAMES 'utf8'";
    mysql_query($intrebari, $connect);

    $intrebari = "SELECT * FROM `intrebari` WHERE `id` NOT IN (SELECT `pentru` FROM `intrebari-comentarii`)";
    $result = mysql_query($intrebari, $connect) or trigger_error(E_USER_ERROR);
    $r = mysql_fetch_row($result);
    $numrows = $r[0];

    $rowsperpage = 10;
    $totalpages = ceil($numrows / $rowsperpage);

    if (isset($_GET['pagina']) && is_numeric($_GET['pagina']))
    { $pagina = (int) $_GET['pagina']; } else { $pagina = 1; }

    if ($pagina > $totalpages) { $pagina = $totalpages; }

    if ($pagina < 1) { $pagina = 1; }

    $offset = ($pagina - 1) * $rowsperpage;

    $intrebari = "SELECT * FROM `intrebari` WHERE `id` NOT IN (SELECT `pentru` FROM `intrebari-comentarii`) LIMIT $offset, $rowsperpage";
    $result = mysql_query($intrebari, $connect) or trigger_error(E_USER_ERROR);

if(mysql_num_rows($result) == 0){
echo '
<div style="text-align:center;color:darkred;font-weight:bold;margin:25px;">
    Nu avem intrebari fara raspuns
</div>';
}
    else
    while ($list = mysql_fetch_assoc($result)) {
    $cerereid = mysql_query("SELECT * FROM `membri` WHERE `nume` = '$list[nume]'");
    $randid = mysql_fetch_assoc($cerereid);
    $id = $randid['id'];
    ?>

// codu html pentru cum arata continutul afisat    

<?php
    }
    $range = 6;

    if ( $pagina > 1) { 
    echo '<span class="prima"><a href="/intrebari/fara-raspuns.php"><b>Prima</b></a></span>'; 
    $prevpage = $pagina - 1; 
    }

    for ($x = ($pagina - $range); $x < (($pagina + $range) + 1); $x++) { 

    if (($x > 0) && ($x <= $totalpages)) {  

    if ($x == $pagina) {  
    echo '<span class="curent"> <b>'.$x.'</b> </span>';  
         } else {  
    echo '<span class="prima"><a href="/intrebari/fara-raspuns-'.$x.'.php"><b>'.$x.'</b></a></span>';
         }  
      }
    }
    if ($pagina != $totalpages) { $nextpage = $pagina + 1;  

    if($numrows > 0)
    {
    echo '<span class="ultima"><a href="/intrebari/fara-raspuns-'.$totalpages.'.php"><b>Ultima</b></a></span>';
    }
    }
    ; ?>

MarPlo Mesaje: 4343
Poate ca in loc de:

Cod: Selectaţi tot

"SELECT * FROM `membri` WHERE `nume` = '$list[nume]'"
Ar trebui:

Cod: Selectaţi tot

"SELECT * FROM `membri` WHERE `nume` = '". $list['nume'] ."'"
 
- In rest, din ce stiu, mysql_query() este deprecated; indicatiile de la PHP sunt sa se foloseasca PDO sau MySQLi; pentru mysql_query() nu se mai acorda suport, iar pe serverele cu PHP actualizat va returna mesaj de eroare.

cadou Mesaje: 328
nu are nici o treaba acel rand.
am sa incep sa modific si sa folosesc pdo desi acum cand am invatat si eu cat de cat cererile in baza de date acum tre sa invat altele

MarPlo Mesaje: 4343
Select-ul pt. aflare numar total de randuri ( $numrows ) e gresit, trebuie apliicat COUNT() in instructiunea SQL.
La primul Select, in loc de:

Cod: Selectaţi tot

$intrebari = "SELECT * FROM `intrebari` WHERE `id` NOT IN (SELECT `pentru` FROM `intrebari-comentarii`)";
Foloseste:

Cod: Selectaţi tot

$intrebari = "SELECT COUNT(*) FROM `intrebari` WHERE `id` NOT IN (...)";
 
Iar in paranteza din NOT IN() ar trebui sa se obtina un singur rand cu valori separate prin virgula. Probabil ar trebui folosit in ea un Select cu GROUP_CONCAT(), dar personal ma depaseste.
- Incearca sa testezi instructiunile SQL in PhpMyAdmin sa vezi ce rezultat dau.

Sau poti face intai un Select in "intrebari-comentarii" sa obtii toate id-urie pt "intrebari", apoi le adaugi separate prin virgula in NOT IN() din Select-ul cu COUNT().

- Daca mai sunt si alte grerseli nu stiu, incearca sa intelegi logica codului inainte de a modifica.

Subiecte similare