Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [sql] SELECT i bardzo dużo kolumn
Dycu
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.07.2008

Ostrzeżenie: (0%)
-----


Mam następujący problem. Powiedzmy, że posiadam dwie tabele, w jednej znajduje się id_uzytkownika i ok. 200 kolumn zawierających dane liczbowe odnośnie jakiegoś pomiaru przeprowadzonego przez tego użytkownika. Druga tabela zawiera id i nazwę tego użytkownika:

1 Tabela:
id
id_uzytkownika
wartosc1
wartosc2
...
wartosc200

2 Tabela:
id_uzytkownika
nick

Chciałbym teraz wyciągnąć dane z pierwszej tabeli, ale zamiast id_uzytkownika włożyć w to miejsce nick użytkownika. Wyszukałem, że takie rzeczy robi się za pomocą SELECT'a z zastosowaniem "as" do odnoszenia się do odpowiednich kolumn. Niestety przy tej ilości kolumn jeśli miałbym każdą z nich osobno adresować to chyba bym się zapisał na śmierć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Czy są jakieś metody na np. wyciąganie wszystkich kolumn oprócz skończonej ilości? Bądź jakiś inny sposób aby to przeprowadzić (z poziomu mysql)?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Shili
post
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Prawdę mówiąc nie widzę sensu takiego rozdrobnienia. No chyba, że jeden użytkownik może mieć wiele nicków do jednego id, albo użytkownik o danym nicku może mieć wiele swoich id.

  1. SELECT * FROM pomiar, nick WHERE nick.id_uzytkonika = pomiar.id_uzytkownika
Go to the top of the page
+Quote Post
Dycu
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.07.2008

Ostrzeżenie: (0%)
-----


Wygodniej mi przechowywać samo id w tej tabeli jak i innych niż za każdym razem nick.

To co podałeś nie rozwiązuje mojego problemu, gdyż potrzebuję, żeby kolumna z nickami zastąpiła kolumnę z id, a nie została dołączona na koniec. Bo potem muszę za pomocą php odpowiednio martwić się o wyświetlanie, a tak zrzuciłbym to na odpowiednie zapytanie. Mam nadzieję, że teraz jest w miarę jasne o co mi chodzi.
Go to the top of the page
+Quote Post
Shili
post
Post #4





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Podałaś.

Cytat
Wygodniej mi przechowywać samo id w tej tabeli jak i innych niż za każdym razem nick.
Ok, teraz rozumiem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Zawsze możesz stworzyć sobie widok, który wybierze Ci nick i wszystkie 200 wartości (sporo zachodu). Chyba że znowu czegoś nie rozumiem odnośnie zastąpienia. Chcesz mieć tylko te 200 prób i jeden nick, tak? Jeśli tak, to w czym przeszkadza (jeśli transfer, to ok) wybranie również identyfikatorów? Możesz się odwoływać do 200 wartości i do nicka, a resztę zostawić w spokoju.
Go to the top of the page
+Quote Post
Dycu
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.07.2008

Ostrzeżenie: (0%)
-----


Cytat
Podałaś.


Przepraszam.

Cytat
Zawsze możesz stworzyć sobie widok, który wybierze Ci nick i wszystkie 200 wartości (sporo zachodu). Chyba że znowu czegoś nie rozumiem odnośnie zastąpienia. Chcesz mieć tylko te 200 prób i jeden nick, tak? Jeśli tak, to w czym przeszkadza (jeśli transfer, to ok) wybranie również identyfikatorów? Możesz się odwoływać do 200 wartości i do nicka, a resztę zostawić w spokoju.


Więc problem jest taki, że potem w pętli wrzucam te dane do <table> i muszę się martwić, aby w odpowiednie miejsce wrzucić zamiast id, nick. Niby mały problem, ale przy tej ilości danych robi się to nieprzyjemne. Dlatego wolałbym wyciągać dane z bazy już w takiej formie w jakiej potem chcę je wyświetlać.
Go to the top of the page
+Quote Post
Shili
post
Post #6





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Polecam w takim razie jeszcze raz widoki.
Go to the top of the page
+Quote Post
sowiq
post
Post #7





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dycu, podczas wyświetlania stosujesz tablicę asocjacyjną, czy numeryczną? Bo jeżeli asocjacyjną, to ja nie wiem o co Ci chodzi.

Skoro masz tablicę np.
Kod
$row['a'], $row['b'], $row['c']
, to co Cię podczas drukowania jej elementów obchodzi, czy na jej końcu jest jakieś $row['xyz'] ?
Go to the top of the page
+Quote Post
Dycu
post
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.07.2008

Ostrzeżenie: (0%)
-----


Tablicę numeryczną, gdyż nie zamierzam się odwoływać do każdego elementu po nazwie (przy 200 elementach w linii to jednak problem), a tak lecę zwykłą pętlą. A jeśli kolejność jest zachwiana, to muszę się martwić tym, żeby zamiast id wrzucać w dane miejsce nick z ostatniej kolumny.

Wydaje mi się, że te widowki to rozwiązanie mojego problemu, muszę się tylko pobawić w stworzenie odpowiedniego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Niestety muszę odświeżyć pytanie.

Skonstruowałem coś takiego:
Cytat
CREATE VIEW ReturnData
(id,nazwa,symbol,nazwaZespolu,
200 kolumn danych)
AS
SELECT id, nazwa, symbol, nazwaZespolu,
200 kolumn danych
FROM (
SELECT * FROM Wroclaw
LEFT JOIN Zaklady ON Wroclaw.zaklad_id = Zaklady.idZ
LEFT JOIN Urzadzenia ON Wroclaw.urzadzenie_id = Urzadzenia.idU
) AS t;


Czyli chciałem najpierw połączyć 3 tabele, a potem z tego wybrać i ustawić w odpowiedniej kolejności interesujące mnie dane. I jak się okazuje mysql nie pozwala na SELECT'y w podzapytaniach, więc znów jestem w lesie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Bo nie widzę innego sposobu na pobranie tego tak jak potrzebuję. Jakieś pomysły czy zostać przy ustawianiu kolumn w odpowiedniej kolejności już w php?

Ten post edytował Dycu 17.07.2008, 16:08:21
Go to the top of the page
+Quote Post
sowiq
post
Post #9





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Dycu @ 17.07.2008, 17:08:00 ) *
a tak lecę zwykłą pętlą.

Yhym. Mówisz, masz:

  1. <?php
  2. // $row - tablica asocjacyjna
  3. foreach($row as $id => $v){
  4. if($id != "login") // login - nazwa kolumny z loginem
  5. echo "Pomiar: ".$id.". Wynik: ".$v."<br>\n";
  6. }
  7. ?>


Voila' :]


[edit]
Aha, jeszcze jedno. Z doświadczenia wiem, że od
Kod
SELECT * FORM `table1`, `table2` WHERE `table1`.`t1_id` = `table2`.`t2_id` AND `table1`.`t1_id` > 100

wydajniej jest użyć:
Kod
SELECT * FROM `table1`
    LEFT JOIN `table2` ON `table1`.`t1_id` = `table2`.`t2_id`
    WHERE `table1`.`t1_id` > 100


Sposób taki daje nie tylko większą szybkość działania, ale i przejrzystość kodu, jeśli łączysz więcej tabel.
http://dev.mysql.com/doc/refman/5.0/en/lef...timization.html

Ten post edytował sowiq 17.07.2008, 17:02:23
Go to the top of the page
+Quote Post
miskorz
post
Post #10





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 17.07.2008

Ostrzeżenie: (0%)
-----


Kwestia optymalizacji zapytania swoją drogą... ale po co aż widok?? (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)
W kwestii przypomnienia... gwiazdkę po SELECT można zastąpić wyspecyfikowanymi nazwami kolumn, które chcemy mieć w wyniku (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif) czyli przykładowo

SELECT pomiar.id,nick.nick,pomiar.pomiar1,....,pomiar.pomiar200
FROM pomiar, nick
WHERE nick.id_uzytkownika = pomiar.id_uzytkownika;

Ten post edytował miskorz 17.07.2008, 22:10:31
Go to the top of the page
+Quote Post
sowiq
post
Post #11





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(miskorz @ 17.07.2008, 23:09:44 ) *
Kwestia optymalizacji zapytania swoją drogą... ale po co aż widok?? (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)
W kwestii przypomnienia... gwiazdkę po SELECT można zastąpić wyspecyfikowanymi nazwami kolumn, które chcemy mieć w wyniku (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif) czyli przykładowo

SELECT pomiar.id,nick.nick,pomiar.pomiar1,....,pomiar.pomiar200
FROM pomiar, nick
WHERE nick.id_uzytkownika = pomiar.id_uzytkownika;


A przeczytałeś pierwszego posta? Bo wydaje mi się, że średnio...

Cytat
Niestety przy tej ilości kolumn jeśli miałbym każdą z nich osobno adresować to chyba bym się zapisał na śmierć smile.gif.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:00