Wpis z mikrobloga

Mirki pomocy bo zaraz osiwieje, chociaż już się i tak zaczyna ( ͡° ʖ̯ ͡°)

Dostałem aplikacje do poprawki napisaną w Laravel4, wszystko fajnie do momentu, aż musiałem dorobić zwykłą wyszukiwarkę po branżach. Sytuacja wygląda następująca:

Są dwie tabele firmy i branże, jedna firma może działać w kilku branżach i tak to też jest zapisane w DB poprzez serializację danych np.

- dla firmy A a:4:{i:0;s:3:"105";i:1;s:3:"104";i:2;s:3:"102";i:3;s:3:"101";}
- dla firmy B a:4:{i:0;s:3:"104";i:1;s:3:"103";i:2;s:3:"102";i:3;s:3:"101";}

gdzie 101 to Medycyna, 102 to Weterynaria, 103 - Spożywcze, 104 - IT, 105 - Energetyka

potrzebuję teraz wyciągnąć wszystkie firmy dla branży np. Spożywcze (103) i Energetyka (105)

Kiedyś pisałem prostą wyszukiwarkę i dla takich potrzeb stosowałem coś takiego:

if(Input::has('city')) {
$query->whereIn('city', $city);
}

to wyszukiwał mi wszystkie miasta o określonych ID z DB, ale nigdy nie miałem styczności z danymi serializowanymi :(

Dajcie wędkę....

#programowanie #php #laravel #webdev
  • 24
  • Odpowiedz
@pnowak452: generalnie sprawa #!$%@?. ( ͡° ͜ʖ ͡°) To jest baza MySQL?
Generalnie problemem będzie, jak skutecznie wyszukać te identyfikatory w tym ciągu znaków. Raczej nie myśl o tym, aby deserializować to po stronie bazy danych. Także zapomnij o wydajności, kiedy nie masz odpowiednich indexów.
Programista płakał jak projektował DB. ( ͡° ͜ʖ ͡°)
Jedyny pomysł na to, aby szukać tych ID'ków regexpem.
  • Odpowiedz
sie nie znam to się wypowiem:
dodac kolumne branzefirmy i wpakowac tam IDfirmy, IDbranzy z kolumny gdzie jest serializacja (a potem ta kolumne wywalic)
lub rzeźba w guwnie i szukanie przez LIKE %s:3:"105"%
  • Odpowiedz
Rownie dobrze moglbys tak zaprojektowac aplikacje w Pythone, Rubym i kazdym innym jezyku


@marrbacca: mozna, ale jakos takie problemy widuje sie w PHP, czego dowodem jest wlasnie post OP ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@Kofels: Dobry trop!

SELECT branze FROM company WHERE branze REGEXP '.*;s:[0-9]+:"101".*'
Teraz tylko muszę ułożyć ładne zapytanie wyciągające dane do innej tabeli zgodnie z sugestią @breja

Ja pier****( ͡° ʖ̯ ͡°)
  • Odpowiedz
widuje sie w PHP, bo to najpopularniejszy jezyk


@marrbacca: tak, dokladnie taki jest powod ( ͡° ͜ʖ ͡°) Popularnosc jezyka powodem trzymania serializowanych obiektow w bazie ( )

Dobry trop!


@pnowak452: dobry jak cholera. Zwiazac szczegoly implementacji warstwy danych z logika biznesowa, bo dziala ( ͡° ͜ʖ ͡°) A potem sie cos zmieni w serializacji PHP (heheh,
  • Odpowiedz
@M4ks: nie, powodem trzymania zserializowanych danych jest jak juz pisalem na poczatku dupny projekt bazy danych. Moglby byc zrobiony w kazdym jezyku.
To, ze takie bledy widzisz w PHP jest powodem tego niskiego progu wejscia (tak jak napisal @Kofels) oraz jego popularnosci - bo skoro jest popularny to czesciej bedziesz w nim widzial takie bledy.
Gdyby Python byl najpopularniejszym jezykiem, to widzialbys wiecej zle zaprojektowanych aplikacji w nim, niz w
  • Odpowiedz
@marrbacca: ale naucz sie ironie łapać, co? Za mało lennyfejsów było czy jak?
I przykro mi, ale Python, Java czy C# sa popularniejsze niz php,przynajmniej wg. TIOBE
  • Odpowiedz
@Ginden: kazde jezyki pozwola na takie sztuczki - chociazby Java. Natomiast chodzi raczej o pewne standardy i zrodla nauki - nikt na forach od pehape nie widzi nic zlego we wsuwaniu serializowanych danych, bo, hehe, dziala. Tak samo sortowanie po stronie klienta tez dziala, wiec o co chodzi? I potem takie pomysly sie mnoza, ludzie maja takie przyklada i efekty widac..
  • Odpowiedz
@marrbacca: wg tiobe jest na 8 miejscu i spada - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

@M4ks: najlepsze jest to że geniusze którzy projektowali PHP wpadli na świetny pomysł żeby kodować niektóre rzeczy w serializowanych stringach znakiem NULL (tak, tak ASCII = 0). Świetny pomysł, zrobić format danych który wygląda jak tekstowy ale jednak jest binarny i to jeszcze rozpieprzy każdą aplikację która spróbuje go wpakować w null-terminated string. @pnowak452 Stawiam plusa że ten zserializowany
  • Odpowiedz