Wpis z mikrobloga

@siemanko:

ciężko będzie, bo nazwy kolumn wyciąga się z INFORMATION_SCHEMA. Łatwiej chyba będzie zrobić dla każdej kolumny warunek IF przy zapytaniu.
@siemanko: to nie jest coś, do czego sql jest zaprojektowany. Ale da się zrobić:

kolumny przeglądasz tak: http://stackoverflow.com/questions/4950252/mysql-iterate-through-column-names

Potem konstruujesz dynamicznego selekta z nazwa kolumny pobrana z powyższego, i jak jest nienulowa wartość dla Twojego wiersza tabeli, to ja gdzieś na boku zapamiętujesz i sprawwdzasz następną kolumnę.

Ale to brzydki hack. Po co Ci coś takiego? Bo wygląda, jakbyś miał złą reprezentację danych - jak się dobrze tabelki zaprojektuje, to nie
@rss: @plushy: @anonim1133: @tell_me_more:

Ogólnie to tak:

Każdy rekord to użytkownik gdzie poszczególne kolumny to wartości dla parametrów. Teraz bym chciał wziąć tego użytkownika i otrzymać listę parametrów, dla których wartość jest różna od 0.

Ogólnie wiem, że można zrobić pętle w php i takie tam, ale z tego co słyszałem to zapytania w sql są mega wydajne i myślałem, że będzie to szybsze. Jeśli się mylę to
@siemanko: nie łatwiej i wygodniej byłoby to załatwić w zewnętrznym języku? Robisz zwykłego selecta, gdzie warunkiem jest co najmniej jedno pole różne od zera, a potem sobie już analizujesz w dowolnym języku rekordy.
@rss: @anonim1133: Będę musiał chyba wykorzystać ten kod bo myślałem, że istnieje jakieś proste zapytanie, które rozwiązało by problem, ale trudno. Przyznam, że sql jak na razie to dla mnie czarna magia i że na wszystko zawsze znajdzie się jakieś zaklęcie:) Trzeba będzie się wreszcie kiedyś dokształcić. Dzięki za pomoc i pozdrawiam:)
@siemanko: ew. możesz zrobić coś takiego, jeśli rzeczywiście chcesz się bawić tym w bazie (ale trochę to brzydko wygląda)

SELECT

IF(kolumna_1 >0, 'kolumna_1', kolumna_1) AS kolumna_1,

IF(kolumna_2 >0, 'kolumna_2', kolumna_2) AS kolumna_2,

(...)

FROM users

czyli: jeśli pole kolumnax ma wartość większą od zera, zwróć string 'kolumnax", w przeciwnym wypadku zwróć wartość pola kolumnax, a całość zwróć jako kolumnax.
@siemanko: w takim razie masz dwa wyjścia: albo będziesz gdzieś przechowywał bieżącą listę kolumn (lub ją sobie zawsze pobierał) i będziesz w PHP generował zapytanie z IFami, albo zrobisz to tak, jak pokazałem wcześniej.
@rss: Chyba postąpię tak jak w pierwszym wyjściu, ale teraz tak sobie myślę, że równie dobrze mogę zbudować sobie dynamicznie jedno duże zapytanie dla każdego wiersza takie jak w drugim wariancie. Tylko kwestia czy jest to dobrą praktyką wysyłać tak duże zapytania?
@siemanko: to zależy co dokładniej siedzi w zapytaniu. ;) Poczytaj sobie o wynalazku zwanym

EXPLAIN
w MySQL - bardzo ładnie pokazuje co się dzieje z zapytaniem do bazy. Przeanalizuj i sam stwierdź czy to ma sens.
@siemanko: to powinneś to trzymać tak:

table parametry (id_parametru, nazwa_parametru, ...) -- tu masz wypisane jakie parametry w ogole sa mozliwe

table uzytkownicy (id_uzytkownika, ...) -- tu masz wypisane, jacy sa uzytkownicy

table wartosci_parametrow_dla_uzytkownikow (id_uzytkownika, id_parametru, wartosc_parametru) -- tu masz 2 klucze obce - do uzytkownikow i do parametrow, i trzymasz wszystkie wartosci parametrow

i wtedy masz selekta po prostu

select nazwa_parametru from wartosci_parametrow_dla_uzytkownikow w where id_uzytkownika = $id_uzytkownika and wartos_parametru