![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 4 Dołączył: 29.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
potrzebuję mieć w skrypcie opcję przenoszenia kolumn. Mam taki skrypt:
Chciałbym jednak w tym zapytaniu wykluczyć potrzebę podawania typu przenoszonej kolumny. Do wykrywania typu kolumny mam taki kod:
Jednak gdy wstawię go w nawiasie zamiast zmiennej:
to PhpMyAdmin sypie błędami: Cytat #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT column_type FROM information_schema.columns WHERE table_name = `table`' at line 1 O co biega? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Może trochę nie na temat ale zżera mnie ciekawość: po co? Po co Tobie to przenoszenie kolumn?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 4 Dołączył: 29.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Po to, że piszę stronę internetową, która będzie nakładką na bazę danych.
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Znaczy takie PMA....
Dziekuje, ciekawośc zaspokojona. Zamiast o to: (SELECT column_type FROM information_schema.COLUMNS WHERE table_name='table' AND COLUMN_NAME = 'aaa') wkładać w zapytanie z alter table, pobierz wpierw ten tyb jako osobne zapytnie, zapisz do zmiennej, a potem do tego alter table wstaw wartosc tej zmiennej - to chyba dość logiczne i oczywiste |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 34 Dołączył: 22.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
musisz zrobic dynamiczny SQL
czyli jakas procedurka albo skrypt w php chodzi o to (przybliżony skrypt)
a pozniej robisz execute po $alter inaczej tego nie zrobisz |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 4 Dołączył: 29.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jednak ja bym chciał to osiągnąć w jednym zapytaniu. Chyba, że da ragę ta zmienną zrobić w zapytaniu, czyli @var = ....
Bo tak bym się o to nie pytał. |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
To teraz znowu zżera mnie ciekawość: a czemu chcesz to tak uparcie zrobić w jednym zapytaniu? Jaki tego sens?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 34 Dołączył: 22.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
wg mnie nie da sie tego zrobic, bo alter nie przyjmuje subquery
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 4 Dołączył: 29.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Bo w tedy wstawiam taki kod:
Kod mysql_query('ALTER TABLE `table` MODIFY `'.$colum1.'` (SELECT column_type FROM information_schema.COLUMNS WHERE table_name='table' AND COLUMN_NAME = `'.$colum1.'`) NOT NULL AFTER `'.$colum2.'`') I w jednej linijce kodu mam całe przenoszenie kolumn, a nie kilku. nospor, aleś Ty ciekawy ;-) |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Programowanie nie polega na tym, by wszystko zrobić w jednej linii... bądź poważny.
Skoro piszesz nakładke na bazę danych to rób to porządnie: jesli masz modyfikować jaką tabele, to weź najpierw pobierz info o tej tabeli, sprawdź czy w ogole istnieją dane kolumny itp. A robiąc tę podstawową rzecz, masz od razu całe ifno o kolumnie i możesz bez problemu z niego skorzystać |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 34 Dołączył: 22.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
no to zrob sobie procedure mysql i tez bedziesz mial jedna jeszcze krotsza linie kodu
Nie rozumiem dlaczego koniecznie jedna linie kodu chcesz miec (IMG:style_emoticons/default/smile.gif) oszczedność miejsca? Bo chyba ze czytelność kodu (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 4 Dołączył: 29.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czytelność kodu.
|
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ale to nie ma zadnego związku z poprawą czytelności...
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Cały problem polega na tym, że jest to nikomu niepotrzebny i zbędny ficzer.
Kolejność kolumn (atrybutów) tabeli NIGDY nie była ważna. Większość porządnym DBMS NIE POZWALA wstawić kolumny w dowolnym miejscu, tylko zawsze na końcu. I jest to działanie prawidłowe. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 4 Dołączył: 29.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Skoro piszesz nakładke na bazę danych to rób to porządnie: jesli masz modyfikować jaką tabele, to weź najpierw pobierz info o tej tabeli, sprawdź czy w ogole istnieją dane kolumny itp. A robiąc tę podstawową rzecz, masz od razu całe ifno o kolumnie i możesz bez problemu z niego skorzystać Akurat takie info pobieram, zwracam kolumny z poustawianymi typami i potem chce to jakoś zapisać, czyli muszę znów pobrać nazwy kolumn, sprawdzić, które się zmieniły w nazwie, których nie ma bo zostały usunięte i które mają pozamieniane kolejności. Pomyślę, jak to rozwiązać inaczej. |
|
|
![]()
Post
#16
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Chyba trochę źle do tego podszedłeś. Spójrz choćby w PMA jak on daje użytkownikowi możliwość edycji tabel czy przesuwania pól. Powinieneś pojść mniej więcej w tym kierunku
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 4 Dołączył: 29.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mnie nie interesuje czy PMA daje możliwość przesuwania kolumn czy nie.
Robię pewnego rodzaju magazyn i chce dać użytkownikowi opcję zamiany kolumn miejscami. Tyle. |
|
|
![]()
Post
#18
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Pokazałem ci poprostu jedynie jak to zrobić na przykładzie PMA.... To czy cię to interesuje czy nie to już Twój problem
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 4 Dołączył: 29.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ok. Co by nie było, to mojego problemu nie da się rozwiązać w jednym zapytaniu. Temat chyba jest już wyczerpany :-)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 11:19 |