mysqli zmiana id gdzie pozycja jest równa ośmiu jeśli element id




Przepraszam, jeśli ten został poproszony wcześniej! Oto co im staramy się robić.


Muszę zaktualizować kolumnie „inne”, gdzie $ lasteight jest równa ostatnich ośmiu znaków identyfikatora elementu 


**na przykład** 
mam element 8542658s5s4a2158 w moim db


**Muszę zrobić** 
$ lasteight = 5s4a2158; mysqli\_query ($ con UPDATE inw ustawić inne = 'log\_itm' GDZIE item\_id = '$ lasteight');


Jeszcze raz przepraszam, jeśli ten został poproszony przed I zostały poszukiwania godzin !! Stukrotne dzięki!
```
$lasteight = mysqli_real_escape_string($_POST['lasteight']);

mysqli_query($con, "
    UPDATE inv SET
        other = 'log_itm'
    WHERE
        RIGHT(item_id, 8) = '$lasteight'
");

// OR

mysqli_query($con, "
    UPDATE inv SET other = 'log_itm' WHERE item_id LIKE '%". $lasteight ."'
");

```
<p>kolejność kolumn ma znaczenie, więc jeśli (i tylko jeśli) kolejność kolumn jest zgodna, możesz na przykład:</p><pre><code>insert into items\_ver select * from items where item\_id=2; </code></pre><p>lub jeśli nie pasują, możesz na przykład:</p><pre><code>insert into items\_ver(item\_id, item\_group, name) select * from items where item\_id=2; </code></pre><p>ale poleganie na kolejności kolumn jest błędem, który może się zdarzyć (może się zmienić, podobnie jak liczba kolumn) - utrudnia także czytanie sql</p><p>nie ma dobrego „skrótu” - należy wyraźnie wymienić kolumny zarówno dla tabeli, do której wstawiasz, jak i zapytania, którego używasz dla danych źródłowych, np .:</p><pre><code>insert into items\_ver (item\_id, name, item\_group) select item\_id, name, item\_group from items where item\_id=2; </code></pre><p><em> dbfiddle <a href="http://dbfiddle.uk/?rdbms=postgres\_9.6&amp;fiddle=cec35746a8728841974621f20cc6aba0">tutaj</a> </em></p> <p>ma więcej kolumn niż pokaż status tabeli; ale robi sztuczkę:</p><pre><code>select * from information\_schema.tables where table\_schema = database(); </code></pre><p>aktualizacja 2011-06-07 19:02</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = database(); </code></pre><p>te zapytania działają, jeśli ustawisz bieżącą bazę danych.</p><p>możesz także kodować konkretną bazę danych:</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = 'mysql'; </code></pre> IAM nie wiem, to jest to, czego szukasz, ale jeśli rozumiem można to zrobić:


-on sprawdzić obciążenie aktualizacja wartości QS, jeśli jej nie ma użyć ukrytego pola wprowadzania.


-pierwsze czas ładowania strony z QS, zrobić swoje normalne przetwarzanie i przechowywanie wartości QS w polu wejściowym ukrytym. 


-Jeśli nie ma QS następnie użyj ukrytej wartości wejściowej


-po odświeżenie strony, można przekierować do tej samej strony, w tym momencie można użytkownik Request.Form [], aby odzyskać pole wprowadzania ukryty, nadal załadować dane poprawnie, ale pozbyć się QS.


to miało sens w mojej głowie, nie jestem pewien, że to ma sens teraz, ale ja nie pozwolę ci zdecydować. <p>inne ogólne ustawienia limitu czasu (nie tylko dla blokad, ponieważ innodb\_lock\_wait\_timeout dotyczy tylko blokad wiersza innodb) to <a href="http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar\_wait\_timeout">wait\_timeout</a> i <a href="http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar\_interactive\_timeout">interactive\_timeout</a> (oba domyślne to 28 800)</p> <p>najlepszym sposobem byłoby użycie tabel, które już masz. utwórz dwie tabele - tabela-a, tabela-b na potrzeby testu możesz nawet zaktualizować tę samą kolumnę o te same informacje, aby nie wpływać na żadne rzeczywiste dane.</p><p>na przykład update table\_a ustaw id = id gdzie id = 100;</p><p>otwórz dwie sesje dla tej samej bazy danych. na jeden biegnij</p><pre><code>begin tran update table\_a set id=id where id = 100; </code></pre><p>dwa biegi</p><pre><code>begin tran update table\_b set id=id where id =100; </code></pre><p>następnie skopiuj instrukcje aktualizacji do sesji przeciwnych i uruchom je w tym samym czasie. w jednym,</p><pre><code>update table\_b set id=id where id =100; </code></pre><p>we dwóch</p><pre><code>update table\_a set id=id where id = 100; </code></pre><p>właśnie próbowałem tego teraz i dostałem na ms-sql</p><pre><code>msg 1205, level 13, state 56, line 1 transaction (process id 23) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. rerun the transaction. </code></pre> <p>od <a href="http://msdn.microsoft.com/en-us/library/ms188029.aspx">books online</a> </p><blockquote> <p>format nowej\_tabeli określa się, oceniając wyrażenia na liście wyboru. kolumny w nowej\_tabeli są tworzone w kolejności określonej przez listę wyboru. każda kolumna w tabeli nowa\_ ma taką samą nazwę, typ danych, dopuszczalność nullab i wartość jak odpowiednie wyrażenie na liście wyboru. <strong> właściwość tożsamość kolumny jest przenoszona </strong>, z wyjątkiem warunków określonych w „praca z kolumnami tożsamości” w sekcji uwagi.</p> </blockquote><p>w dół strony:</p><blockquote> <p>po wybraniu istniejącej kolumny tożsamości do nowej tabeli nowa kolumna dziedziczy właściwość tożsamość, chyba że spełniony jest jeden z następujących warunków:</p> <ul> <li>instrukcja select zawiera funkcję join, group by lub funkcję agregującą.</li> <li>wiele instrukcji select jest łączonych za pomocą union.</li> <li>kolumna tożsamości znajduje się na liście wyboru więcej niż jeden raz.</li> <li>kolumna tożsamości jest częścią wyrażenia.</li> <li>kolumna tożsamości pochodzi ze zdalnego źródła danych.</li> </ul> <p>jeśli którykolwiek z tych warunków jest spełniony, kolumna jest tworzona nie null zamiast dziedziczenia właściwości tożsamość. jeśli w nowej tabeli wymagana jest kolumna tożsamości, ale taka kolumna nie jest dostępna lub chcesz mieć wartość początkową lub przyrostową inną niż kolumna tożsamości źródłowej, zdefiniuj kolumnę na liście wyboru za pomocą funkcji tożsamość. zobacz „tworzenie kolumny tożsamości za pomocą funkcji tożsamość” w sekcji przykłady poniżej.</p> </blockquote><p>więc ... teoretycznie można uciec:</p><pre><code>select id, val into copy\_from\_with\_id\_2 from with\_id union all select 0, 'test\_row' where 1 = 0; </code></pre><p>ważne byłoby skomentowanie tego kodu, aby go wyjaśnić, aby nie został usunięty następnym razem, gdy ktoś na niego spojrzy.</p> <p>to rozwiązanie używa również <code>keep</code>, ale <code>val</code> i <code>kind</code> można również po prostu obliczyć dla każdej grupy bez podzapytania:</p><blockquote> <pre><code>select min(id) keep(dense\_rank first order by kind) id , val , min(kind) kind from mytable group by val; </code></pre> <pre> id | val | rodzaj -: | : | : 3 | 3 | 4 2 | 1337 | 1 </pre></blockquote><p><em> dbfiddle <a href="http://dbfiddle.uk/?rdbms=oracle\_11.2&amp;fiddle=3db08df2d9b684302b9460a818b35d8c">tutaj</a> </em></p><p>keep… first i keep… last to specyficzna dla oracle funkcja agregatów - możesz przeczytać o <a href="http://docs.oracle.com/cd/e11882\_01/server.112/e41084/functions065.htm#sqlrf00641">tutaj</a> w dokumentach oracle, lub <a href="https://oracle-base.com/articles/misc/rank-dense-rank-first-last-analytic-functions#first\_and\_last">na oracle\_base</a> :</p><blockquote> <p>funkcje pierwsza i ostatnia mogą być użyte do zwrócenia pierwszej lub ostatniej wartości z uporządkowanej sekwencji</p> </blockquote> <p>możesz go znaleźć w domyślnym katalogu, w zależności od instalacji. na przykład w moim red hat jest to/var/log/mysql /</p><p>czas zapytania to czas w sekundach, po upływie którego powinien rozpocząć się zapis. można to zrobić podczas uruchamiania i podczas uruchamiania.</p><p>log-slow-queries = /var/log/mysql/mysql-slow.log</p><p>long\_query\_time = 1</p> <p>musisz ustawić<em> logger </em>na bardziej szczegółowy z dwóch poziomów (debug), ale następnie ustawić próg na<em> appenderze </em>, aby poinformować go, aby pokazywał tylko wiadomości w info i powyżej</p><pre><code>log4j.appender.appender\_stdout.threshold=info </code></pre> odśwież stronę i dodaj jeszcze raz...też tak mam