online: 3; azi: 1387; total: 53393 Webdesign - Phpmysql - 36

PHP MySQL - WHERE si LIKE

Utilizare WHERE si operatori pentru a cauta valori specifice

Pentru a cauta valori specifice, pentru a extrage doar acele inregistrari care respecta anumite criterii, se adauga o clauza WHERE in interogarea SELECT.
Clauza WHERE este folosita pentru a filtra inregistrarile. Se adauga dupa numele tabelului.
  - Sintaxa:
SELECL nume_coloana/e FROM nume_tabel WHERE conditie
"conditie" - poate fi una sau mai multe expresii conditionale care specifica criteriul de selectare. Aceste expresii conditionale pot folosi operatori de comparatie, aritmetici si logici.

Tabelul urmator prezinta operatorii cei mai des folositi cu WHERE in instructiunile MySQL:
OperatorSemnificatieExemplu
= Egal WHERE `id`=3
< Mai mic decat WHERE `id`<3
> Mai mare decat WHERE `id`>3
<= Mai mic sau egal cu WHERE `id`<=3
>= Mai mare sau egal cu WHERE `id`>=3
!= (also <>) Nu este egal cu WHERE `id`!=3
IS NOT NULL Are valoare WHERE `id` IS NOT NULL
IS NULL Nu are valoare WHERE `email` IS NULL
BETWEEN min AND max Intr-un interval specific (min si max) WHERE `id` BETWEEN 2 AND 4
NOT BETWEEN min AND max Nu este in intervalul (min si max) WHERE `id` NOT BETWEEN 2 AND 4
IN(val1, val2, val3) Se gaseste in lista de valori WHERE `id` IN(1, 3, 4)
OR Unde una din conditii este adevarata WHERE `id`>3 OR `name`='www.discant.ro'
AND Unde amandoua conditii sunt adevarate WHERE `id`>3 AND `name`='www.discant.ro'

  - Exemplu (selecteaza toate randurile din tabelul "users" care au "name=www.discant.ro" si afiseaza "id" si "email" din ele):
<?php
// conectare la baza de date "tests"
$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
}

$name = 'Marplo';            // seteaza numele intr-o variabila

// Interogare sql SELECT 
$sql = "SELECT `id`, `email` FROM `users` WHERE `name`='$name'"; 

// executa interogarea si retine rezultatele
$result = $conn->query($sql);

// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
  // afisaza datele pentru fiecare rand din $result
  while($row = $result->fetch_assoc()) {
    echo '<br /> id: '. $row['id']. ' - email: '. $row['email'];
  }
}
else {
  echo '0 results';
}

$conn->close();
?>
- Dupa cum observati, nu e necesar sa selectati coloana la care aplicati conditia WHERE. Coloanele specificate dupa SELECT dicteaza ce coloane sa returneze, iar coloanele adaugate dupa WHERE determina ce randuri vor fi returnate.
- Nota, in interogarea $sql este folosita variabila ($name) care contine numele, aceasta variabila este adaugata intre ghilimele simple in interogare pentru ca MySQL sa preia valoarea ei ca tip sir (string).
Exemplul de mai sus va afisa:
id: 2 - email: user@domain.net

• Clauza WHERE poate fi folosita si cu optiunile ORDER BY si LIMIT pentru a ordona si limita datele selectate.
                Exemplu:       $sql = "SELECT `name`, `pass` FROM `users` WHERE `id`>2 ORDER BY `name` LIMIT 2";

• In instructiunile SQL se pot adauga si expresii cu calcule matematice, folosind caracterele adunare (+), scadere (-), inmultire (*), impartire (/), si procent (%).
                Exemplu:       $sql = "SELECT `name`, `pass` FROM `users` WHERE `id`=($x + $y)";

LIKE, NOT LIKE

LIKE si NOT LIKE sunt termeni folositi pentru identificare valori de tip sir, in combinatie cu urmatoarele caractere:
  • %   - reprezinta orice secventa de caractere sau niciuna.
  • _   (o sublinie), reprezinta exact un caracter.
Acesti termeni sunt folositi cu clauza WHERE, iar cautarea este case-insensitive (fara diferenta intre litere mari si mici).

Exemple de interogari cu LIKE /NOT LIKE

<?php
// ...

#sql = "SELECT * FROM `nume_tabel` WHERE `name` LIKE 'mar%'";

// ...
?>
- Aceasta clauza WHERE se potriveste cu www.discant.ro, marius, Mars, si asa mai departe, dar nu Omar.

<?php
// ...

#sql = "SELECT * FROM `nume_tabel` WHERE `name` NOT LIKE '%mar'";

// ...
?>
- Aceasta clauza WHERE se potriveste cu Mar, Omar, Romar, si asa mai departe, dar nu cu Mars. ('%mar%' se potriveste cu Mars, Marius, Romars, etc.).

<?php
// ...

#sql = "SELECT * FROM `nume_tabel` WHERE `name` NOT LIKE 'mar%'";

// ...
?>
- Aceasta interogare va returna toate randurile ale caror valoare "name" nu incepe cu Mar.

<?php
// ...

#sql = "SELECT * FROM `nume_tabel` WHERE `name` LIKE 'mar_'";

// ...
?>
- Aceasta interogare va returna toate randurile ale caror valoare "name" incepe cu Mar si are patru caractere (Mars, Mara, mar8, etc.).

Interogarile cu termeni LIKE sunt in general mai lente deoarece nu pot profita de indexi.
Pentru a cauta un simbol procent (%) sau o sublinie (_) in text, le precedati cu backslash, in acest mod ( \%   sau   \_ ).
Sublinia poate fi folosita in combinatie cu ea insasi; (exemplu,   LIKE '_ _'   va cauta orice combinatie de doua litere).
Cuvantul cheie LIKE trebuie sa fie intotdeauna urmat de un sir, chiar daca termenul cautat este limitat la numere.