Ajutor SQL SELECT - excludere rezultate în funcție de o condiție

Am tabelul test in care vreau sa-mi listeze valoare1 in functie de accesari dar mai am si valoare2 aici vreau sa fac cumva daca valoare2 este 0 sa nu listeze. Nu stiu daca m-ati inteles … dar nu prea stiu sa explic.

$records = $db->query("SELECT * FROM test ORDER BY accesari DESC LIMIT 0,10");
foreach($records as $row) {
echo $row['valoare1']."\n";
}

Asa?

SHOW CREATE TABLE `test`.`exemplu`;
SHOW COLLATION;
SHOW ENGINES;
SELECT  `id`,  `username`,  LEFT(`descriere`, 256) FROM `test`.`exemplu` LIMIT 1000;
SHOW CREATE TABLE `test`.`exemplu`;
use test;
create table afisari(
id int(9) auto_increment primary key,
valoare int(10)
);
/* Affected rows: 0  Înregistrări găsite: 0  Avertizări: 0  Durează de 2 queries: 0,594 sec. */
use test;
insert into afisari(valoare) values ('0');
/* Affected rows: 1  Înregistrări găsite: 0  Avertizări: 0  Durează de 2 queries: 0,109 sec. */
use test;
insert into afisari(valoare) values ('10');
/* Affected rows: 1  Înregistrări găsite: 0  Avertizări: 0  Durează de 2 queries: 0,125 sec. */
use test;
insert into afisari(valoare) values ('100');
/* Affected rows: 1  Înregistrări găsite: 0  Avertizări: 0  Durează de 2 queries: 0,032 sec. */
use test;
insert into afisari(valoare) values ('50');
/* Affected rows: 1  Înregistrări găsite: 0  Avertizări: 0  Durează de 2 queries: 0,047 sec. */
use test;
insert into afisari(valoare) values ('33');
/* Affected rows: 1  Înregistrări găsite: 0  Avertizări: 0  Durează de 2 queries: 0,031 sec. */
use test;
select * from afisari WHERE valoare >= 0;
/* Affected rows: 0  Înregistrări găsite: 5  Avertizări: 0  Durează de 2 queries: 0,000 sec. */
use test;
select * from afisari WHERE valoare >= 1;
/* Affected rows: 0  Înregistrări găsite: 4  Avertizări: 0  Durează de 2 queries: 0,000 sec. */

Nu inteleg nimic de aici, nici nu stiu ce sa iau din el.

select * from afisari WHERE valoare >= 1;

1 Like

Da, doar asta am incercat doar ca nu schimba nimic.

$records = $db->query("SELECT * FROM test WHERE valoare2 >= 1 ORDER BY accesari DESC LIMIT 0,10");
foreach($records as $row) {
echo $row['valoare1']."\n";
}
SELECT * 
FROM   test 
WHERE  valoare2 <> 0 
ORDER  BY accesari DESC 
LIMIT  0, 10 
1 Like

WHERE valoare2 != 0

Dar, sincer, pune mâna și învață SQL înainte să încerci să faci lucruri. Ce vrei tu să faci acolo nu e nimic SF și nu e chiar ceva ce merită un thread separat pe forum…

1 Like

Acum nu se mai ordoneaza dupa accesari.

@Gabriela here: play with this: http://sqlfiddle.com/#!9/ce48b/2

2 Likes

off topic: mersi de linkul la site-ul sql :))

Ia încearcă așa:

while ($row = $records->fetch_assoc()) {
    echo $row['valoare1']."\n";
}

:slight_smile:


(pentru că mysqli::query() returnează boolean sau mysqli_result, nu array)

3 Likes

@Gabriela , dupa cum a zis si Ionut, ai o greseala in PHP, nu in query-ul MySQL.

Mai jos ai codul complet.

$records = $db->query("SELECT * FROM test WHERE valoarea2 != 0 ORDER BY accesari DESC LIMIT 0,10");
    while ($row = $records->fetch_assoc()) {
    echo $row['valoare1']."\n";
}
1 Like