Mysql frågehistorik. Vi aktiverar ytterligare funktioner i PhpMyAdmin. Långsam förfrågningslogg

Och i standardpaketet kan du göra många saker med den. Men hur som helst, den har ett antal användbara funktioner som kan aktiveras separat. I den här artikeln kommer vi att avslöja ytterligare funktioner i PhpMyAdmin och se hur de kan vara användbara för oss.

inställningar

Innan du börjar, se till att PhpMyAdmin är igång. Om du loggar in kan du se ett meddelande som detta:

phpMyAdmin-konfigurationslagringen är inte helt konfigurerad, vissa utökade funktioner har avaktiverats. För att ta reda på varför klicka här.
(phpMyAdmin-konfigurationsbutiken är inte korrekt konfigurerad, vissa funktioner är inaktiverade. För att ta reda på varför, klicka här)

$cfg["Server"][$i]["controluser"] = "pma"; $cfg["Server"][$i]["controlpass"] = "pmapass"; $cfg["Server"][$i]["pmadb"] = "phpmyadmin"; $cfg["Server"][$i]["bookmarktable"] = "pma__bokmärke"; $cfg["Server"][$i]["relation"] = "pma__relation"; $cfg["Server"][$i]["table_info"] = "pma__table_info"; $cfg["Server"][$i]["pdf_pages"] = "pma__pdf_pages"; $cfg["Server"][$i]["table_coords"] = "pma__table_coords"; $cfg["Server"][$i]["column_info"] = "pma__column_info"; $cfg["Server"][$i]["history"] = "pma__history"; $cfg["Server"][$i]["recent"] = "pma__senaste"; $cfg["Server"][$i]["table_uirefs"] = "pma__table_uiprefs"; $cfg["Servers"][$i]["users"] = "pma__användare"; $cfg["Servers"][$i]["usergroups"] = "pma__användargrupper"; $cfg["Server"][$i]["navigationhiding"] = "pma__navigationhiding"; $cfg["Server"][$i]["tracking"] = "pma__spårning"; $cfg["Servers"][$i]["userconfig"] = "pma__userconfig"; $cfg["Server"][$i]["designer_coords"] = "pma__designer_coords"; $cfg["Servers"][$i]["favorite"] = 'pma__favorit'; $cfg["Servers"][$i]["savedsearches"] = "pma__savedsearches";

Ändra användarnamn, lösenord och databasnamn efter eget gottfinnande. De återstående konfigurationsvärdena är tabellnamn. Om du lämnar dem tomma inaktiveras deras motsvarande funktioner. Men generellt sett skulle jag rekommendera att låta dessa namn vara som de är. Beroende på versionen av PhpMyAdmin kommer inte alla värden att vara tillgängliga som standard. I det här fallet använde jag PhpMyAdmin version 4.2.x.

När du är klar med konfigurationen måste du skapa databasen. Skapa en databas med det namn du angav i din konfigurationsfil. Leta sedan efter en fil som heter create_tables.sql på din maskin. Troligtvis kommer den här filen att finnas i rotkatalogen för den installerade PhpMyAdmin, eller i underkatalogen scripts. Om du använder Linux kommer platsen att vara /usr/share/phpMyAdmin/examples/ eller /usr/share/doc/phpmyadmin/scripts/ . Kör den här filen i den skapade databasen. Om du ändrade tabellnamnen i ovanstående konfiguration, glöm inte att ändra dem i databasen också.

BETYD ANVÄNDNING PÅ mysql.* TILL "pma"@"localhost" IDENTIFIERAD AV "pmapass"; GRANT SELECT (Värd, Användare, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_prive_priv ) PÅ mysql.user TILL "pma"@"localhost"; GE VAL PÅ mysql.db TILL "pma"@"localhost"; GE VAL PÅ mysql.host TILL "pma"@"localhost"; GRANT SELECT (Värd, Db, Användare, Tabellnamn, Table_priv, Column_priv) PÅ mysql.tables_priv TILL "pma"@"localhost"; GIVA SELECT, INFOGA, UPPDATERA, DELETE PÅ phpmyadmin.* TO "pma"@"localhost";

Efter att ha loggat ut från PhpMyAdmin och loggat in igen bör vi se att varningen har försvunnit. Om det inte saknas, klicka på länken för att ta reda på vad som saknas.

Låt oss titta på ytterligare alternativ.

Bokmärken

Genom att aktivera bokmärkestillägget kommer du att kunna bokmärka frågor. När du skapar en begäran kan du lägga till den i dina bokmärken. Om begäran redan har lanserats kan du också bokmärka den genom att rulla till botten av sidan och fylla i formuläret.

När du går till SQL-fliken, längst ner ser du en panel där du kan välja en fråga från bokmärkena. Välj den du behöver och ange vad du vill göra med den: köra, visa eller ta bort.

Anslutningar

Relationsalternativet är förmodligen det bästa jag någonsin använt. Om du använder främmande nycklar blir sådana nycklar klickbara. När du klickar på en främmande nyckel kommer du att föras till en annan tabell: posten som den främmande nyckeln refererar till.

Dessutom, när du lägger till eller redigerar en främmande nyckel, istället för ett textinmatningsfält, kommer du att presenteras med en lista över alla möjliga alternativ.

Tabellinformation

Naturligtvis är det bra att se en lista med alla möjliga värden för en främmande nyckel. Men det skulle vara ännu bättre om vi fick en specifik kolumn istället för ID. För att uppnå detta måste du aktivera able_info . Gå till huvudtabellen, gå till fliken "Struktur" och klicka på länken för att se relationen. Om du bläddrar till botten av sidan ser du vilken kolumn som visas för den nyckeln.

Om jag skapar en ny post med en främmande nyckel, kommer jag att se värdet från kolumnen jag angav bredvid primärnyckelvärdet. Nu behöver du inte komma ihåg ID.

PDF-sidor

Relationer mellan tabeller kan exporteras till PDF. För att göra detta måste du aktivera pdf_pages, table_coords och relation i config. Nästa steg är att öppna databasen som du vill exportera till PDF. Klicka på fliken "Operationer". Klicka sedan på länken "Redigera eller exportera kopplingsschema". Fyll i alla fält och klicka på "Skicka". Om du fyllt i formuläret får du en PDF-fil med alla nödvändiga uppgifter.

Kolumninformation

Med kolumninformationsalternativet kan du lägga till kommentarer till kolumnnamn. Detta kan vara användbart när du vill förmedla till andra vad kolumnen är och vilken data den lagrar. Du kan göra detta genom att ändra kolumndata. Du kanske märker att en ny kommentar har lagts till i kolumnen. Om du skriver in en kommentar visas den direkt under kolumnnamnet.

Transformationer kan tillämpas på kolumner på samma sätt. Med hjälp av transformeringar kan du göra ett filnamn till en hyperlänk som öppnar den angivna filen.

Berättelse

Om du aktiverar historik kommer alla förfrågningar som görs via PhpMyAdmin att sparas i din historik tills du loggar ut eller stänger webbläsaren. Historiken kan ses genom att anropa dialogrutan "Fråga" och klicka på knappen "SQL-historik".

Nyligen

I navigeringsfältet kan du märka en "Senaste"-knapp som innehåller en rullgardinslista med tabeller som du nyligen har tittat på. Denna lista visas som standard. Men om du vill lagra det permanent mellan sessioner, kan du aktivera det senaste alternativet i konfigurationen, och din webbhistorik kommer att sparas i databasen.

Inställningar för tabellvisning

När du tittar på tabeller kan du ändra ordningen på kolumner genom att flytta dem. Dessa ändringar är endast synliga för dig. Den faktiska ordningen på kolumnerna ändras inte. Dessutom kan du också sortera kolumnerna i stigande och fallande ordning. Sådana ändringar lagras i sessionen och när de loggas ut kommer de att återställas och ersättas med standardinställningarna. Men om du vill att tabeller ska läggas upp "på ditt sätt" hela tiden, aktivera alternativet table_uirefs.

Användare och användargrupper

Du kanske inte vill visa alla funktioner för alla användare. I det här fallet kan du dela in dem i grupper på fliken "Användare". Skapa en ny grupp och bestäm vad användare i den här gruppen kan se. Du kan sedan lägga till användare i den här gruppen och du kan vara säker på att de bara kommer att se de menyalternativ som du tillåter dem att se. På så sätt kan du ge olika användare tillgång till olika systemfunktioner, samt dölja oanvända alternativ.

Dölj navigering

Med navigationshiding kan du dölja vissa tabeller i navigeringsfältet. Om du klickar på glödlampsikonen bredvid tabellnamnet döljs den. Du kan också göra den synlig igen genom att klicka på glödlampsikonen igen. På så sätt kommer du att avlasta navigeringsfältet från oanvända tabeller.

Spårning

Med den här funktionen kan du spåra alla ändringar som gjordes i specifika tabeller med hjälp av PhpMyAdmin. Genom att gå till tabellen och öppna fliken "Spårning" kan du skapa en version av den aktuella tabellen. Nu kommer alla ändringar som gjordes i den här tabellen med PhpMyAdmin att sparas. På samma sätt kan du enkelt avgöra vilka ändringar som har gjorts i tabellen sedan den senaste versionen skapades.

Anpassade inställningar

Alla användarinställningar lagras i din webbläsare som standard. Detta innebär att om du bestämmer dig för att använda en annan webbläsare, eller rensa din webbläsares cache, kommer alla dina inställningar att gå förlorade. Genom att aktivera userconfig sparar du dina inställningar i databasen permanent.

Databasdesigners koordinater

Genom att aktivera designer_coords kan du se relationerna mellan dina tabeller i databasdesignervy. Genom att gå till databasen och klicka på fliken "Designer" kommer du att se något som liknar bilden nedan, som visar relationerna mellan tabellerna. Samtidigt kan du visuellt hantera relationerna mellan tabeller med detta fönster.

Favoriter

Genom att aktivera favoritalternativet kan du märka att stjärnikoner visas bredvid tabellnamn i databasläsarläge. För att lägga till ett bord till dina favoriter klickar du bara på stjärnan. I navigeringsfältet kommer du att se en rullgardinslista "Favoriter". Tabeller som du har lagt till i dina favoriter visas i den här listan.

Sparar sökparametrar

Genom att öppna databasen och gå till fliken Fråga kan du ställa in avancerade sökningar. Sökalternativ kan bokmärkas. Observera att dessa inte är de SQL-frågebokmärken som diskuterats tidigare. Med det här alternativet kan du spara dina sökparametrar och använda dem senare.

Slutsats

Funktionerna som anges är lätta att aktivera och kan verkligen hjälpa dig att arbeta med databaser genom PhpMyAdmin. Jag gillar särskilt möjligheten att borra ner på främmande nycklar så att jag kan se relaterade poster. Jag hoppas att du aktiverar dessa funktioner och att de kommer att vara användbara i ditt dagliga arbete.

Den här artikeln ägnas åt att studera ämnet "Grunderna i webbprogrammering", där vi fortsätter att arbeta med databasen, men med flera tabeller, skapa kopplingar mellan dem och bekanta oss med SELECT-satsen.

  • Skapa en databas i PHPMyAdmin. Arbeta med data med PHP, MySQL och HTML
  • Informationssystem för att bedöma effektiviteten och effektiviteten av arbetet hos en laboratorieanställd
  • Utveckling av ett informationssystem för chefen för en oljebas
  • Skapande av ett informationssystem för en bilservicechef
  • Översikt över funktionaliteten hos ett mjukvaruverktyg för att hantera ett företags produktionscykel

phpMyAdmin är ett program skrivet i PHP och designat för att hantera en MySQL-server via World Wide Web. phpMyAdmin stöder ett brett utbud av MySQL-operationer, de vanligaste operationerna stöds via användargränssnittet (hantera databaser, tabeller, fält, relationer, index, användare, rättigheter, etc.), samtidigt kan du direkt köra vilken SQL som helst fråga.

Förfrågningarär ett databasobjekt som tjänar till att extrahera data från tabeller och presentera det för användaren i en bekväm form. Det speciella med frågor är att de hämtar data från bastabeller och skapar en tillfällig tabell utifrån dem. Genom att använda frågor undviker du dubblering av data i tabeller och ger maximal flexibilitet vid sökning och visning av data i databasen.

SQL-frågor - frågor byggda med en enhetlig uppsättning SQL-instruktioner (Structured Query Language - strukturerat frågespråk). SQL kan inte helt klassificeras som ett traditionellt programmeringsspråk, där du skulle ange variabler, beskriva en typ och mycket mer. Det innehåller bara en uppsättning standardaccessoperatorer till data som lagras i en databas.

SpråkSQLuppdelad i fyra delar:

  • Data Definition Operatörer(Data Definition Language, DDL): skapa ("skapa"), ändra ("ändra"), släpp ("radera").
  • Operatörer för datamanipulation(Data Manipulation Language, DML): välj, infoga, uppdatera och ta bort.
  • Operatörer för definition av dataåtkomst(Data Control Language, DCL): bevilja (”tillhandahålla”) och återkalla (”beröva”).
  • Transaktionskontrollutlåtanden(Transaction Control Language, TCL): commit (“complete”), rollback (“rollback”), savepoint (“save”).

Vi kommer att titta på ett SQL-kommando - kommandot för datahämtning VÄLJ , så tack vare detta kommando kan du organisera alla möjliga förfrågningar.

OperatörssyntaxVÄLJ

VÄLJ <список полей, которые вы хотите отразить в запросе> |*

FRÅN <список таблиц, с которыми вы работаете>

[VAR <предикат-условие выборки или неявное внутреннее соединение таблиц>]

[GRUPP FÖRBI <список полей группировки> [HAR <предикат-условия для группировки>]]

[BESTÄLLA FÖRBI <список полей, по которым упорядочивает вывод> ]

Information inom hakparentes är som vanligt valfri.

Låt oss titta på några exempel på förfrågningar i phpMyAdmin, för detta kommer vi att använda den tidigare databasen " Komp _ texnika " I denna databas har vi redan skapat en tabell " produkt "(produkt), som återspeglade motsvarande egenskaper hos enheten: produkt_ ID ( primärnyckel ), tillverkare ( tillverkare ), modell ( modell ), Gud_ sozd ( skapelseår ) Ochtyp_ ID ( produkttyp, är en främmande nyckel ) (se fig. 1).

Även i denna databas har vi lagt till en annan enhet " bärbar dator "(typ av produkt), som återspeglade motsvarande egenskaper hos enheten: typ_ ID(primärnyckel), typ(typ), OS(operativ system), processor(CPU), pamjat(minne), zvet(Färg), ves(vikt) och zena(pris) (se fig. 2).

Nu, innan du fortsätter med att skapa frågor, är det nödvändigt att upprätta en koppling mellan enheter (tabeller). För att göra detta kommer vi att arbeta med tabellen " bärbar dator", nämligen, välj objektet" Anslutningar "(se fig. 3).

Därefter öppnas en sida där du behöver ange de fält som är ansvariga för relationen mellan tabellerna (se fig. 4). Anslutningen kan också upprättas på annat sätt med " Designer "(se fig. 4)

Efter att ha etablerat relationer mellan tabeller kan vi således fortsätta med att skapa frågor genom att gå till toppmenyn " SQL ».

Begäran 1. Visa information om tillgänglig utrustning för 2012 års release (se tabell 1).

bord 1

För att implementera denna begäran använde vi operatören Välj – för att visa information från fältet tillverkare ( tillverkare ) Och modell ( modell ) , från – att beskriva tabellen från vilken du behöver visa information; predikat var – för villkoret för att välja rader från resultattabellen, det vill säga den producerar data som har skapandets år ( Gud_ sozd) motsvarade 2012 ; beställa förbi – för att sortera data efter fält tillverkare ( tillverkare ) .

Begäran 2. Visa information om antalet utrustningar från tillgängliga tillverkare (se tabell 2).

Tabell 2

Med count är en av de så kallade " aggregeringsfunktioner", som räknar antalet icke-tomma tupler, är ett kraftfullt verktyg för att konstruera frågor; i det här fallet grupperade du utdata efter tillverkare ( tillverkare ) .

Begäran 3. Visa den totala kostnaden för bärbara datorer efter tillgängliga tillverkare, sorterade efter belopp i stigande ordning (se tabell 3).

Tabell 3

Denna fråga kräver data från två tabeller, för detta måste vi kombinera tabellerna " produkt " (produkt) och " bärbar dator "(typ av produkt), för att göra detta använder vi ett predikat Ansluta sig indikerar föreningen av fält: den primära nyckeln i tabellen bärbar dator . typ _ ID och tabell främmande nyckel produkt . typ _ ID . Observera också att när du arbetar med två eller flera tabeller, i uttalandet Välj, när du beskriver fält är det nödvändigt att ange tabellnamnet för detta fält, till exempel bärbar dator . typ . belopp , såväl som räkna refererar till " aggregeringsfunktioner”, som beräknar summan av värdena på tuplar, i vårt fall summan av kostnaden för utrustning.

Begäran 4. Visa data på bärbara datorer med operativsystemet Windows-8, med en kostnad på högst 25 tusen (se tabell 4).

Tabell 4

Begäran 5. Visa information om produkten: tillverkare(tillverkare), modell(modell), pamjat(minne), processor(processor) och zena(pris), efter kategori " podhodit "och" inte podhodit "(se tabell 5).

Tabell 5

Resultat:

Program :

Välj fall när (laptop.pamjat = 1000) och (laptop.processor >=2600) sedan "podhodit" annars "inte podhodit" slutar som itog, product.maker, product.model, laptop.pamjat som pamjat_v_Gb, laptop.processor as proc_v_Mgz, laptop.zena från produkt anslut laptop på laptop.type_ID=product.type_ID där laptop.type som "l%" beställ med 1 desc, 6

Med ase slutet – urvalspredikat, som används för att fördela varor i kategorier i enlighet med kriterierna. tycka om "1%" – ett predikat som används för att matcha strängar med ett mönster. Mönstret är en sträng som kan använda två specialtecken: " % "och" _ ", Var " % " matchar valfri sträng (eventuellt tom) och " _ " matchar ett enstaka tecken, alla andra tecken än specialtecken kan bara matchas mot specialtecken och sig själva. beställa förbi [ asc| desc] – designad för att sortera frågeresultat [stigande (standard) | Fallande], är sortering möjlig för ett eller flera fält.

Operatör VÄLJ är inget annat än ett uttryck för att få en resultatuppsättning från databastabeller. Vi genererar en förfrågan med hjälp av operatören VÄLJ , och han i sin tur, efter att ha avslutat sitt arbete, returnerar den resulterande datamängden. Dessa data returneras i form av en tabell, som i sin tur kan bearbetas av följande operatör VÄLJ etc.

Bibliografi

  1. Sammanfattning till phpMyAdmin [Elektronisk resurs] / URL: http://php-myadmin.ru/about/notice.html
  2. Databasfrågor och deras användning. Typer av förfrågningar. Teknik för skapandet [elektronisk resurs] / URL: http://www.yaklass.ru/materiali?mode=cht&chtid=514
  3. Ostrovsky S.L. Grunderna i webbprogrammering för skolans hemsida. Föreläsning 5. PHP+MySQL [Text]/ S.L. Ostrovsky // Informatik. - 2008.-№21.-s.2-15

Fråga: Historik för ms sql-frågor


Hur visar jag förfrågningshistorik (ta bort, uppdatera...)?

Svar:
profileraren är den långsammaste granskningen du kan tänka dig. Utökade evenemang kan anpassas för att passa dina behov och det kan också laddas upp etc., men något av dessa alternativ kräver resurser.

Fråga: Exekveringshistorik för frågor


Säg mig, är det möjligt att se någonstans i MS SQL vem som utförde vilka frågor i en specifik databas?

Svar: iluxa1810, denna information är endast delvis tillgänglig. Prova en fråga som:

T-SQL-kod
1 2 3 4 VÄLJ deqs.last_execution_time AS [ Time ], dest.TEXT AS [ Query] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text (deqs.sql_handle) AS dest ORDER BY deqs.last_execution_time DESC

För en fullständig historik över frågor måste du logga eller använda verktyg som SQL Profiler.

Fråga: SQL-fråga för att returnera tidigare värden till databasen


Hej alla!

Berätta för mig hur kan jag returnera den näst sista orderstatusen i alla beställningar från ett visst datum i databasen?

Kanske finns det någon form av sql-fråga eller kanske något slags skript... Jag skulle vara mycket tacksam.

Programmeraren gjorde ett litet misstag när han integrerade med mitt lager och alla beställningar ändrade sin status till den som fanns i integrationsmodulens inställningar och vet inte hur de ska returnera den.

Vi märkte inte direkt och det var för sent att återställa den gamla kopian av databasen. Det finns redan nya beställningar i butiken.

Svar: Poetiq,
InnoDB kan lagra frågehistorik.

Våldsamt slag
1 ~/ .mysql_history

Rulla upp den senaste säkerhetskopian och upprepa kommandona
Tja, generellt sett, före varje integration bör du göra en säkerhetskopia, och ännu bättre, testa den på en testserver

Fråga: SQL-fråga för att söka från flera tabeller


God eftermiddag. Snälla hjälp mig att förstå om jag kan göra detta eller om databasen behöver göras om eller om en sådan sökning inte är möjlig att implementera.
Jag skriver på delphi rad xe10.
Jag skriver i tabellen Anställda information om den anställde på en rad, i klädstorlekarna finns det också en rad, och historiken för vad han fick (många rader och den enda skillnaden är ID_rab).

Jag vill göra en sökning
så att när jag blev tillfrågad om efternamn eller fliknummer skulle det ge mig följande information:
Om arbetaren från den första tabellen i dbgrid1,
dess storlekar från den andra tabellen i dbgrid2
och historiken relaterad till denna anställd från Tabell 3 (det kan finnas många rader som bara skiljer sig åt med ID_rab) i dbgrid3

I den första tabellen:

på sekunden:

SQL
1 2 3 4 5 6 7 8 9 10 11 SKAPA TABELL Storlek (ID_razmOdejdi INT INTE NULL IDENTITET (1, 1), Kläder VARCHAR (4), ID_rab INT, PRIMÄRNYCKEL (ID_razmOdejdi), UTLÄNDSK NYCKEL (ID_rab) REFERENSER Anställda, ) ;

i den tredje:

SQL
1 2 3 4 5 6 7 8 9 10 11 SKAPA TABELL Historik ( ID_story INT INTE NULL IDENTITY (1, 1), Nim_means VARCHAR (15), ID_rab INT, PRIMÄRNYCKEL (ID_story), UTLÄNDSK NYCKEL (ID_rab) REFERENSER Anställda, );

Göra 3 ADOQuery med olika frågor samtidigt?
Jag vet inte hur man får den att visa information från en annan tabell som hör till den första
Om det var möjligt att göra detta: Jag skrev in en person i sökningen, den hittade honom och med hjälp av hans ID_rab skulle den hitta information i andra tabeller och samtidigt visa den i 3 olika dbgrids.

Svar:

meddelande från Rogzar

Och om du helt raderar all information om en anställd, hans storlek, historia, efter behov, kan detta göras genom en begäran?

Om du aktiverar kaskadradering i tabellen Anställda, raderas data från de underordnade tabellerna om du tar bort en rad i den. Annars måste du göra flera DELETE-förfrågningar.

Tillagd efter 14 timmar 31 minuter
Sådan kod är sårbar för anropade attacker. Frågor med parametrar ska användas.

Fråga: En begäran - är det möjligt?


God eftermiddag mina damer och herrar!
Berätta för mig hur man rationellt löser följande problem...
Det finns tre tabeller: produkter (det finns verkligen få av dem, ca 60-80 stycken), försäljningshistorik och saldon...

I förenklat strukturen är som följer:
varor:
id
namn

Beställningshistorik:
id
s_date
good_id
pris

balans:
id
s_date
order_id
räkna

Alla tre tabellerna är länkade med ID (goods.id - order_history.good_id, order_history.id - balance.order_id).
Uppgiften är att få det totala saldot av alla varor för ett godtyckligt datum! Det vill säga, för varje produkt måste jag få närmaste datumpost från balansräkningen och försäljningshistoriken (från balansräkningen, respektive kvantiteten, från försäljningshistoriken - priset).

Det är klart att du kan gå igenom alla produkter efter ID och köra en SQL-fråga i varje iteration, men på något sätt... Jag gillar inte det här alternativet! :) Är det möjligt att lösa problemet på ett elegant sätt - med en begäran?

Jag skulle vara tacksam för alla idéer!

Svar: Jag ser inga kontraindikationer. Om man sätter ordning på strukturen.

Trubbig!
Lade till lite redundans i databasen
Du har redan för mycket av det. Dessutom är det potentiellt motsägelsefullt. Jag ser inga restriktioner som skulle kunna hindra mig från att göra en ny post i balans så att skillnaden mellan denna och den föregående posten i kvantitet inte kommer att motsvara den totala kvantiteten från order_history för samma period.

Fråga: Kapslad fråga, hjälp mig att kombinera flera enkla


God eftermiddag Jag kommer att vara mycket tacksam för din hjälp)) Jag har tjatat på min hjärna länge.
Lite historia. Det finns en viss pool av förfrågningar med en URL relaterad till dem, målet är att utfärda korsande förfrågningar för en viss lista med URL:er, vilket också bestäms av förfrågan

Och så finns det flera frågor som körs i ordning:
$sql2 = VÄLJ URL FRÅN listan VAR `group` = "1" OCH `proekt`= "1" GRUPPER EFTER URL ORDNING EFTER ANTAL(*) DESC LIMIT 3 - skärmdump
Jag väljer en lista med webbadresser i mängden 3 stycken och samlar dem sedan till en vy för begäran

$return=array();
$maxcount=mysql_query($sql2);
while($url = mysql_fetch_array($maxcount)) (
$return = $url;
}
foreach ($return as $url1) ( //samla en sträng med webbadresser för Muscle från en array
if ($frag2==0) ( $urls = "`url`="."".$url1."""; $frag2=1; ) else $urls .= " ELLER `url` = "$ url1.""";
}

I det här fallet $urls = `url` = "http://www.MosDance.com/" ELLER `url`="http://raisky.com/" etc.

Jag visar en lista med nycklar relaterade till dessa webbadresser
välj `nyckel` från (VÄLJ `nyckel` , COUNT(*) SOM totalt FRÅN listan WHERE `group` = "1" OCH `proekt`= "1" OCH (".$urls.") GRUPPERA EFTER `nyckel` ORDNING BY `total` DESC) som t2 WHERE t2.total >=3

Egentligen är huvudfrågan hur man kan minska denna fråga? Hur monterar man URL:en korrekt, så att du kan bli av med php crutch-skriptet som samlar URL:en i önskad ordning och göra allt, till exempel med en fråga i databasen? i allmänhet, hur kan jag få det slutliga resultatet från en fråga smartare än mina kryckor?

Svar:

God dag!
Skriv aldrig COUNT(*). Ett bättre alternativ skulle vara COUNT(`id`).
Skriv inte heller RAND(*). Det är naturligtvis bättre att skriva det annorlunda: kommentarer har funktioner i dem, och så är fallet.
Alla ovanstående metoder för att välja poster från databasen belastar mysql-servern hårt. Om du inte har 30 tusen poster i databasen, kommer det inte att vara så smärtsamt.

Angående begäran:
Gräv mot INNER JOIN. Eller skicka mig en dumpning av ditt bord, jag hjälper dig om du berättar mer om problemet, eftersom det jag läser är för lat för att fördjupa sig i allt väsen =)

-----
- programmeringslektioner här. Intressanta funktioner där också =)

Fråga: Fråga från två tabeller med flera kriterier


God kväll!

Snälla hjälp mig att göra följande begäran:
1. Det finns en tabell över transaktioner med fält: namn på valuta, datum, typ av växelkurs och andra fält
2. Det finns en tabell med historik över växelkurser med fält: valutanamn, datum, typ av växelkurs, växelkurs.

Frågan måste genereras baserat på alla fält och poster i den första tabellen och växelkursen från den andra tabellen. Dessutom måste det finnas ett sammanträffande av alla tre urvalskriterierna: namn på valuta, datum och typ av växelkurs.

Tack på förhand!

Svar:
Du kommer att vara mer bekväm i frågedesignern.

Jag kom på hur man skapar inre glädje via SQL, vid första anblicken är det enkelt. Men det finns en fråga:
1. I transaktionstabellen finns ett fält "Transaktionstyp"
2. Frågan jag gör först drar för varje tabellpost transaktionerna "Currency Rate Type" från tabellen "Transaction Types"
3. Begäran dras ut från tabellen med kurser enligt kriteriet "Typ av kurs" som erhölls i steg 2.

Med andra ord: först kombineras 2 tabeller (transaktioner och typer av transaktioner), och sedan, med hjälp av allmän information, läggs data från tabellen "Valutakurser" till dem.

Fråga: Ta reda på i vilken tabellpost frågan misslyckas med ett fel


Jag stötte på en situation där en fråga till en faktatabell returnerar ett fel, men jag kan inte fånga poster i katalogen som leder till ett fel (frågan handlar om datum)
Själva frågan returnerar alla poster från faktatabellen, plus ett beräknat fält från katalogen. Om katalogen fylldes i korrekt skulle underfrågan returnera ett värde per faktatabellpost. Men i själva verket finns det fel i posterna i katalogen som jag inte kan fånga.
Är det möjligt att på något sätt se vilken faktatabellpost som orsakar felet?

Svar: Inte roligt. För det har länge varit (bokstavligen):
Så fort deliriumdetektorn slocknade kom han genast springande... Vad är det för fel?
Innan du på ett heroiskt sätt skriver superfrågor (för alla tillfällen) måste du sätta på hjärnan - ja, åtminstone i ett par minuter...
Tja, personligen var ditt "lidande" tillräckligt för en galen begäran, vars plats är papperskorgen.
Och du fick en "toffel" bara för dess semantik och syntax...
Bra idé!
Och så fort du tvättar det, ta bort det från hyllan (nåja, åtminstone!) - och "studera, studera och studera" (c). Det är definitivt något med att dela GROUP BY och HA...

Fråga: Fråga profileringsprogram


Hälsningar!

Berätta för mig vem som använder vad (program, IDE, etc.) för att analysera frågor i synnerhet, jag är intresserad av frågeanalysverktyg för deras optimering. Där du kan se frågeplanen: frågeindex, fullständig genomsökning, etc.

11) | DATUM | DATUM | förarnamn | VARCHAR(100) | procent | INT(11) | summa_mottagen_från_klient | DECIMAL (9 , 2 ) | summa_tariff_for_driver | DECIMAL (9 , 2 ) | summa_for_paid | DECIMAL (9 , 2 ) | betald_status | tinyint(1) | procent_företag | INT(11)

Fältet "paid_status" lagrar betalningsstatusen. Behövs i en förfrågan som:

få all data. Det borde vara så här: om "betald_status = 1", så får du alltid "0" istället för siffran i fältet "summa_för_betald".

Om jag lägger till "and paid_status not like "1"" till förfrågan visar det sig att utdata från denna rad inte kommer att tas emot alls, men jag behöver få allt, bara med fältet "summa_for_payed" redan ändrat beroende på tillståndet "paid_status"

Tillsatt efter 25 minuter
Jag ska tillägga, det är också nödvändigt att under en begäran med kommandot summa(summa_for_payed) för ett visst datum, få beloppet, med hänsyn till värdet på fältet "paid_status", eller snarare det där "paid_status = 1 ”, då betraktas "summa_for_payed"-fälten i beloppet som "0" om "paid_status = 1"

Svar: Ja, jag trodde det, men problemet är det här: om jag återställer linjen, och om fel användare plötsligt valdes av misstag, kommer jag inte att kunna returnera den, eftersom hans gamla skuld raderades, så jag tänkte bara använda den här indikatorn och bestämma betalningen, och om nödvändigt returnera den igen, se hans skuldbelopp. Tja, generellt sett vore det bättre för historien att se hans skuld, som han betalade av.

Tillagd efter 34 minuter
Kära gurus.
Jag hittade något som kan göras så här

SQL
1 VÄLJ SUMMA (OM (`paid_status` = 1 , 0 , `summa_for_payed`) ) FRÅN mytable

Jag gjorde flera förfrågningar, det verkar vara vad jag behöver, men kan du berätta för mig om det finns några fallgropar i en sådan förfrågan, är det detta jag behöver? Ska jag göra detta eller leta efter andra lösningar? Triggers kommer också att tänka på. kanske något med dem? Vad råder du. Jag funderade också på att ändra värdena, om 0 så är det betalt, om 1 är det inte, och sedan i urvalet, multiplicera talet med indikatorn, och om det är noll, så får jag bara noll. om det finns en så får jag numret själv. bara onödiga beräkningar... Vad är din åsikt?

Händelseloggar är det första och enklaste verktyget för att fastställa systemstatus och identifiera fel. Det finns fyra huvudloggar i MySQL:

  • Felloggen— standardfellogg som samlas in medan servern körs (inklusive start och stopp);
  • Binär logg— En logg över alla databasmodifieringskommandon som behövs för replikering och säkerhetskopiering.
  • Allmän frågelogg— huvudfrågelogg;
  • Långsam frågelogg— logg över långsamma förfrågningar.

Felloggen

Den här loggen innehåller alla fel som uppstod när servern kördes, inklusive kritiska fel, såväl som serveravstängningar, serverstarter och varningar. Det är här du bör börja i händelse av ett systemfel. Som standard matas alla fel ut till konsolen (stderr), du kan också logga fel till syslog (standard på Debian) eller en separat loggfil:

Log_error=/var/log/mysql/mysql_error.log

# Fel kommer att skrivas till mysql_error.log

Vi rekommenderar att du håller den här loggen aktiverad för att snabbt identifiera fel. Och för att förstå vad det här eller det felet betyder, har MySQL perror-verktyget:

Shell> perror 13 64 OS felkod 13: Tillstånd nekad OS felkod 64: Maskinen är inte på nätverket

# Förklarar innebörden av felkoder

Binär (aka binär) logg

Alla databasmodifieringskommandon registreras i den binära loggen, användbara för replikering och återhämtning.

Det tänds så här:

Log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 5 max_binlog_size = 500 miljoner

# Anger plats, livslängd och maximal filstorlek

Observera att om du inte ska skala systemet och implementera feltolerans, är det bättre att inte aktivera den binära loggen. Det är resurskrävande och minskar systemets prestanda.

Begäran logg

Den här loggen innehåller alla mottagna SQL-frågor och information om klientanslutningar. Kan vara användbart för indexanalys och optimering, samt för att identifiera felaktiga frågor:

General_log_file = /var/log/mysql/mysql.log general_log = 1

# Inkluderar loggen och anger filens plats

Du kan också aktivera/inaktivera det medan MySQL-servern körs:

SET GLOBAL general_log = "PÅ"; SET GLOBAL general_log = "AV";

# Du behöver inte starta om servern för att använda den

Långsam förfrågningslogg

Loggen är användbar för att identifiera långsamma, det vill säga ineffektiva frågor. Läs mer i Denna artikel.

Visa loggar

För att se loggar på Debian (Ubuntu) måste du köra:

# Error log tail -f /var/log/syslog #Query log tail -f /var/log/mysql/mysql.log # Logga långsamma förfrågningar tail -f /var/log/mysql/mysql-slow.log

# Om loggarna inte anges separat finns de i /var/lib/mysql

Loggrotation

Glöm inte att komprimera (arkivera, rotera) loggfiler så att de tar mindre plats på servern. För att göra detta, använd verktyget logrotera genom att redigera konfigurationsfilen /etc/logrotate.d/mysql-server:

# - Jag lade allt i ett block och lade till sharedscripts, så att mysql får # flush-logs"d bara en gång. # Annars skulle de binära loggarna automatiskt öka med n gånger varje dag. # - Felloggen är föråldrad, meddelanden går till syslog nu./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log( daglig rotera 7 missingok skapa 640 mysql adm komprimera sharedscripts postrotate test -x /usr/bin/mysqladmin || exit 0 # Om detta misslyckas, kontrollera debian.conf! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; sedan # Verkligen ingen mysqld eller snarare en saknad debian-sys-maint-användare? # Om detta inträffar och inte är ett fel, rapportera en bugg. #if ps cax | grep -q mysqld; sedan if killall -q -s0 -umysql mysqld; avsluta sedan 1 fi else $MYADMIN flush-logs fi endscript )

# Komprimerar och arkiverar nödvändiga loggar, rensar filer

DDL-logg

MySQL upprätthåller också en dataspråklogg. Den samlar in data från operationer som DROP_TABLE och ALTER_TABLE. Loggen används för att återställa fel som uppstod under sådana operationer. DDL Log är en binär fil och är inte avsedd att läsas av användaren, så ändra eller ta inte bort den.

Det viktigaste

Slå alltid på felloggen, använd frågeloggen för att kontrollera applikationens anslutning till databasen, kontrollera frågor och funktion. Loggen över långsamma frågor är användbar för att optimera MySQL-prestanda.