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.
  • Odpowiedz
@siemanko: Jak to nazwy kolumn? Relacyjne bazy danych zwracają wartości kolumn a nie ich nazwy. Da się zrobić ale może lepiej napisz co próbujesz zmodzić.
  • Odpowiedz
@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
  • Odpowiedz
@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
  • Odpowiedz
@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.
  • Odpowiedz
@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:)
  • Odpowiedz
@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.
  • Odpowiedz
@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.
  • Odpowiedz
@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?
  • Odpowiedz