Mysql select gå med exempel. Förstå mySQL JOIN, visuell representation

Förutom det vanliga enkla frågor med enkla förutsättningar SQL-språk låter dig komponera ganska komplexa uttryck, vars gafflar ibland är läskiga att titta på, de ser så obegripliga ut. Sådana frågor förekommer dock inte särskilt ofta, och nästa nivå av komplexitet efter den vanliga SELECT, enligt min mening, är JOIN-kommandot. Låt oss ta reda på hur vi arbetar med det.

Låt oss först titta på de enklaste vanliga frågorna.

VÄLJ ANTAL(*) FRÅN tabell; //count the number of records SELECT * FROM table LIMIT 5,10; //med början från den 5:e posten kommer att välja 10 rader. används oftast för sidnavigering VÄLJ * FRÅN tabell ORDER BY num; //sorterar alla poster från tabellen efter fält num SELECT * FROM table WHERE year="1990"; //välj posten/posterna där årsvärdet är 1990 SELECT * FROM tabell WHERE namn LIKE "%ova%"; //sök i tabellen efter ett namn som innehåller sekvensen "ova" SELECT DISTINCT name FROM table; //om det finns dubbletter av fält, räknas de endast en gång SELECT * FROM name WHERE age IN (12,15,18); // kommer att visa namnen som motsvarar fält med åldrarna 12,15,18 SELECT MAX(age) FROM table; //MAX/MIN - väljer posten med högsta eller lägsta åldersvärde

Låt oss nu gå direkt till JOIN-exemplen:

En mycket populär uppgift där JOIN-kommandot används är att sammanfoga flera tabeller som har någon form av gemensamt drag. Låt oss titta på ett exempel. Låt oss säga att vi har två bord. Den första lagrar data om användarens namn och adress och har även en user_id-kolumn. I den andra kolumnen har vi även en user_id kolumn och en kolumn med användarens hemindex.

VÄLJ namn, adresser FRÅN tabell1 LEFT JOIN tabell2 PÅ table1.user_id=table2.user_id;

För att göra det ännu tydligare kan den här frågan skrivas om på ett klassiskt sätt:

VÄLJ tabell1.namn, tabell1.adresser, tabell2.index FRÅN tabell1, tabell2 WHERE tabell1.användar-id = tabell2.användar-id;

På så sätt kan du få data från flera tabeller, och om det finns ytterligare villkor låt oss lägga till det också:

VÄLJ namn, adresser FRÅN tabell1 LEFT JOIN tabell2 PÅ table1.user_id=table2.user_id WHERE name = "Vasya";

Om vi ​​kastar oss in i teorin lägger vi till det vi har följande alternativ ANSLUTA SIG:

Det skulle vara lämpligt att rita de berömda cirklarna här:

INRE KOPPLING

returnerar skärningspunkten mellan två uppsättningar

VÄLJ t1.namn, t2.ort FRÅN Tabell1 t1 INNER JOIN Tabell2 t2 PÅ t1.nyckel2 = t2.nyckel2;

Reflexionen av INNER JOIN är OUTTER JOIN. Vi är försedda med tre typer av YTTRE JOIN - FULL, VÄNSTER och HÖGER. Ordet YTTRE krävs inte.

FULL GÅ MED

Kombinerar två set

FULL JOIN kommer att returnera ALLA poster från tabellerna tabell och tabell2, utan dubbletter av data. Om det inte finns några data kommer NULL att ersättas.

VÄNSTER GÅ MED

Returnerar data från den vänstra tabellen, samt data från den högra som skär den vänstra.

Om det inte finns tillräckligt med data från den högra tabellen kommer ett NULL-värde att ersättas.

RIGHT JOIN – som du säkert förstår, kommer att returnera alla värden från den högra tabellen och korsande data från vänster.

Undantag

Om vi ​​behöver data från den första tabellen som det inte finns några data för i den högra behöver vi bara lägga till en WHERE-sats

VÄLJ t1.namn, t2.ort FRÅN Tabell1 t1 LEFT JOIN Tabell2 t2 PÅ t1.key2 = t2.key2 VAR t2.key2 ÄR NULL;

Flera JOINs

Genom att använda JOIN kan du gå med inte bara 2 bord, utan så många som behövs. Om du behöver ansluta 2 bord, behöver du 2 JOIN-kommandon. Men du bör inte gå till det extrema och gå med i ett gäng tabeller, allt detta kommer att ha en betydande inverkan på prestanda, så ibland är det bättre att köra flera underfrågor. Exempel på att sammanfoga tre bord:

VÄLJ t1.Namn, t2.Stad, t3.Yrke FRÅN Tabell1 t1 INNER JOIN Tabell2 t2 PÅ t1.key2 = t2.key2 INNER JOIN Tabell3 t3 PÅ t1.key3 = t3.key3;

Tja, jag hoppas att de listade är enkla GÅ MED i exempel hjälpte dig att hantera den här operatören.

JavaScript är blockerat i din webbläsare. Vänligen aktivera JavaScript för att webbplatsen ska fungera!

Arbeta med formulär

HTML-formulär används för att överföra data från användaren av en webbsida till servern. PHP tillhandahåller ett antal specialverktyg för att arbeta med formulär.

Fördefinierade variabler

PHP har ett antal fördefinierade variabler som inte ändras i alla applikationer som körs i en viss miljö. De kallas även miljövariabler eller Miljövariabler. De återspeglar miljöns inställningar Apache webbserver, samt information om begäran av denna webbläsare. Det är möjligt att erhålla värdena för URL, frågesträng och andra element i HTTP-förfrågan.

Alla fördefinierade variabler finns i den associativa arrayen $GLOBALS. Förutom miljövariabler innehåller denna array även globala variabler definierade i programmet.

Exempel 1 Visa $GLOBALS array

Som ett resultat kommer en lista med alla globala variabler att visas på skärmen, inklusive Miljövariabler. De mest använda är:

Variabel Beskrivning Innehåll
$_SERVER["HTTP_USER_AGENT"]Klientnamn och versionMozilla/5.0 (kompatibel; Googlebot/2.1; +http://www.google.com/bot.html)
$_SERVER["REMOTE_ADDR"]IP-adress144.76.78.3
getenv("HTTP_X_FORWARDED_FOR")Klientens interna IP-adress
$_SERVER["REQUEST_METHOD"]Begärningsmetod (GET eller POST)SKAFFA SIG
$_SERVER["QUERY_STRING"]GET-förfrågan kodad data som skickas tillsammans med URL:en
$_SERVER["REQUEST_URL"]Fullständig kundadress inklusive frågesträng
$_SERVER["HTTP_REFERER"]Webbadressen till sidan från vilken begäran gjordes
$_SERVER["PHP_SELF"]Sökväg till programmet som körs/index.php
$_SERVER["SERVER_NAME"]Domänhemsida
$_SERVER["REQUEST_URI"]Väg/php/php_form.php
Hantera användarinmatning

PHP-indatabehandlingsprogrammet kan separeras från HTML-texten som innehåller inmatningsformulären, eller så kan det placeras på en sida.

Exempel 2 Exempel på ingångsbearbetning

För att få formulärdata används den globala variabeln $_POST. Det representerar en associativ matris av data som skickas med POST-metoden. Med hjälp av nycklarna kan vi få de skickade värdena. Nycklarna i denna array är värdena för namnattributen för formulärinmatningsfälten.

Eftersom namnattributet för inloggningsfältet har värdet login(), kommer värdet av detta fält i $_POST-matrisen att representera "login"-nyckeln: $_POST["login"]

Och eftersom det kan finnas situationer när inmatningsfältet inte kommer att ställas in, till exempel när du går direkt till skriptet: http://localhost:8080/login.php. I det här fallet är det lämpligt att kontrollera datatillgänglighet med funktionen isset() innan data bearbetas. Och om variabeln är inställd kommer funktionen isset() att returnera true .

Nu kan vi komma åt formuläret:

Och när knappen trycks ned kommer den inmatade informationen att skickas till skriptet med POST-metoden. login.php:

Det är inte nödvändigt att skicka formulärdata till ett annat skript. Du kan bearbeta formulärdata i samma formulärfil. För att göra detta, låt oss ändra filen form.php på följande sätt:

Logga in på webbplatsen Logga in:

Lösenord:

Datasäkerhet

Datasäkerhet är av stor betydelse i PHP. Låt oss titta på några enkla mekanismer som kan förbättra säkerheten på vår webbplats.

Men först, låt oss ta formuläret från föregående ämne och försöka lägga in lite data i det. Låt oss till exempel ange "alert(hi);" i inloggningsfältet och "lösenord" i lösenordsfältet:

Efter att ha skickat data till html-markeringen kommer javascript-kod att injiceras, vilket visar ett fönster med ett meddelande.

För att undvika sådana säkerhetsproblem bör du använda funktionen htmlentities():

If(isset($_POST["login"]) && isset($_POST["lösenord"]))( $login=htmlentities($_POST["login"]); $password = htmlentities($_POST["lösenord" ]); echo "Din inloggning: $login
Ditt lösenord: $password";)

Och även efter att ha angett html- eller javascript-koden kommer alla taggar att escapes och vi får följande utdata:

En annan funktion - funktionen strip_tags() låter dig helt utesluta html-taggar:

If(isset($_POST["login"]) && isset($_POST["lösenord"]))( $login=strip_tags($_POST["login"]); $password = strip_tags($_POST["lösenord" ]); echo "Din inloggning: $login
Ditt lösenord: $password";)

Resultatet av dess drift med samma ingång blir följande utgång.