Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Operacje na tabeli i polach
Forum PHP.pl > Forum > Przedszkole
potreb
Witam. Mam kilka pytań. W polu 'tel' mam liczby, chciałbym dodać do tych liczb na początek np numer kierunkowy, dla wszystkich na raz.
W jaki sposób przekopiować dane z pola x do pola y, bez utraty danych w polu y.
Czy jest możliwe sortowanie danych (sort. numeryczne) w polu x gdzie głównie są liczby jednak zdarzają się także przy liczbach litery?
To tyle, z góry dzięki za odp.
Kszyhuu
Cytat(potreb @ 28.02.2010, 12:14:52 ) *
W jaki sposób przekopiować dane z pola x do pola y, bez utraty danych w polu y.

Utwórz przez PMA plik SQL, wrzuć treść do edytora i podmień tylko wszędzie(jedną operacją, dla wszystkich x) x na y, po czym wklej ponownie do PMA i wykonaj. Przynajmniej ja tak robiłem. smile.gif
Cytat(potreb @ 28.02.2010, 12:14:52 ) *
Czy jest możliwe sortowanie danych (sort. numeryczne) w polu x gdzie głównie są liczby jednak zdarzają się także przy liczbach litery?

A zwykłe Order by co robi, bo takiej kombinacji nie sprawdzałem?


Cytat(potreb @ 28.02.2010, 12:14:52 ) *
Witam. Mam kilka pytań. W polu 'tel' mam liczby, chciałbym dodać do tych liczb na początek np numer kierunkowy, dla wszystkich na raz.

  1. $number = mysql_query("Select * from tabela");
  2. $test = mysql_fetch_array($number);
  3. $add = '022';
  4. $newnumber= $add.$test[tel];
  5. mysql_query("update tabela set tel=".$newnumber."");

Śmiga jak ta lala. tongue.gif
potreb
Spoko, myślałem że uda mi się to zrobić na zasadzie samych kwerend do bazy, mniejsza z tym i tak wszystko działa okey. Mam jeszcze jedno pytanie.
Tak jak pisałem mam pole w którym są numery i litery:
Kod
1
2
3
4
5
11
1a
1b


Co robi order? Order sortuje, jeżeli masz typ pola (int) sortuje wg liczb poprawnie, jak już masz literę przy liczbie należy zmienić typ pola z int na inny (tylko na jaki) żeby sortowało 1a za 1 a nie za 11 biggrin.gif

Kszyhuu
Spoko, już łapię dokładnie co i jak. Sam MySQL takiego czegoś nie oferuje. Ja widzę tutaj dwie opcje. Musisz albo napisać własny index w PLSQlu, albo na warunkach. Wyglądałoby to mniej więcej tak, że musiałbyś dać ifa i sortować po xyz, gdzie x jest równe 0, jak masz mniej jak trzy znaki, y to liczba, a z to literka, lub a jeśli jej nie ma. Musisz wtedy w order by dać mniej więcej takie coś:
  1. if length(pole) < 3 then "0" else "" + pole + if length(pole) < 2 then +"a" else ""
Tylko przerób to na SQLa W ten sposób będziesz miał zawsze ciąg trzech znaków. Gdzie dwa pierwsze to cyfra, a ostatni to literka. Gdyby był jednocyfrowy, dostaje na początek 0, a jakby nie było literki, to dostaje a.

Wtedy całe sortowanie przebiega już normalnie- 1a znajduje się po 1 a nie po 11. Innych pomysłów już nie mam. Mam z kolei nadzieję, że załapałeś ideę tego. smile.gif
potreb
No widzisz, fajnie z pgsql dałeś z tym że ciąg znaków może być 1,2 lub 3 znakowy i potem następuje litera, także to odpada, co najwyżej dalej literka będzie zapisywana w drugiej kolumnie i tyle, ale to mnie akurat wkurza.

I jeszcze jedno pytanie w jaki sposób znależć rekordy z tabeli x gdzie w y nie są przypisane do id, np id nie pasuje. Defekt usuwania
Kszyhuu
Cytat(potreb @ 1.03.2010, 18:58:16 ) *
No widzisz, fajnie z pgsql dałeś z tym że ciąg znaków może być 1,2 lub 3 znakowy i potem następuje litera, także to odpada, co najwyżej dalej literka będzie zapisywana w drugiej kolumnie i tyle, ale to mnie akurat wkurza.

No ale dlaczego? Zawsze można dorobić dodatkowy warunek, dodający dwa zera. To się spokojnie da zrobić, nie przenosząc literek do kolejnego atrybutu. Przecież to zapytanie można dostosować nawet do kilku znaków, przy optymalnym działaniu kodu.

Cytat(potreb @ 1.03.2010, 18:58:16 ) *
I jeszcze jedno pytanie w jaki sposób znależć rekordy z tabeli x gdzie w y nie są przypisane do id, np id nie pasuje. Defekt usuwania

http://www.cs.put.poznan.pl/tpd/sbd1/slajd...odzapytania.pdf smile.gif
potreb
Dzięki, Kszyhuu, popatrzę się kiedyś na twoje materiały edukacyjne, może się czegoś nauczę.
  1. SELECT DISTINCT(fprefix) FROM `files` WHERE `fprefix` NOT IN ((SELECT nprefix FROM node WHERE nprefix = fprefix))


Moje zapytanie zwraca nprefixy z files, których nie ma w node.

Co do pierwszego, za dużo zabawy, zresztą literki mam oddzielone.

Mam jeszcze pytanie odnośnie GROUP
  1. SELECT f.*, t.* FROM forums f LEFT JOIN forum_topics t ON t.topics_fid = f.forums_id
  2. GROUP BY f.forums_id
  3. ORDER BY f.forums_position, t.topics_date ASC


Pobieram nazwę forum oraz przypisuje do nazwy forum również najnowszy topic jaki został dodany do forum, jednak nie pokazuje od najnowszej daty topica, jeżeli wyrzuce group by listuje wszystkie tematy od najnowszego, jednak co zrobić aby pokazywał tylko jeden najnowszy temat?? Myślałem o podzapytaniu, jednak nie wiem czy w tym przypadku jest możliwość, bo podzapytania głównie idą dla warunków.
Kszyhuu
Daj (nie wiem, czy działa w MySQL):
  1. SELECT top 1 * FROM

albo dodaj:
  1. LIMIT 0,1

Czy tam:
  1. LIMIT 1

Któreś z dwóch ostatnich działa na 100%. Może nawet oba. tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.