Aktywne Wpisy
wykop +33
Dzień dobry, Wykopie!
W dzisiejszym #wykopchangelog przygotowaliśmy dla Was kolejne poprawki! Tym razem są to:
1. Przy tworzeniu znaleziska pojawiał się problem z długimi linkami - gdy url był za długi, dodanie go na Wykop stawało się niemożliwe. Rozwiązaliśmy już ten problem, obecnie można dodać również i dłuższe linki. Pod warunkiem, że nie przekraczają 255 znaków. Będzie nam miło jeśli dacie nam znać czy jest lepiej? (ツ)
2. Testerzy aplikacji #
W dzisiejszym #wykopchangelog przygotowaliśmy dla Was kolejne poprawki! Tym razem są to:
1. Przy tworzeniu znaleziska pojawiał się problem z długimi linkami - gdy url był za długi, dodanie go na Wykop stawało się niemożliwe. Rozwiązaliśmy już ten problem, obecnie można dodać również i dłuższe linki. Pod warunkiem, że nie przekraczają 255 znaków. Będzie nam miło jeśli dacie nam znać czy jest lepiej? (ツ)
2. Testerzy aplikacji #
JestemZielonka123 +396
#bazydanych #programowanie
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.
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
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
foreach($tablica_z_wynikami AS $pojedynczy_rekord) {
foreach($pojedynczy_rekord as $nazwa_pola => $wartosc_pola) {
if($wartosc_pola > 0) echo $nazwa_pola;
}
}
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.
Ale rozwiązanie masz, będzie działało.
EXPLAIN
w MySQL - bardzo ładnie pokazuje co się dzieje z zapytaniem do bazy. Przeanalizuj i sam stwierdź czy to ma sens.
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