DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   Najgori SQL query na svetu (http://www.devprotalk.com/showthread.php?t=4920)

bluesman 09. 06. 2009. 12:50

Tako i treba... ja nisam nikad bio za "baš me briga" stav. Meni se dešavalo da takve stvari radim čak i za klijenta koji mi još uvek duguje pare... ne mogu da gledam to ravnodušan.

Milos Vukotic 09. 06. 2009. 13:12

Citat:

Originalno napisao bluesman (Napišite 70431)
ne mogu da gledam to ravnodušan.

To je to... Nego je problem što se čovjeku s godinama gomilaju takve stvari koje ne može gledat ravnodušan, a to se konačno odrazi na nervnoj bazi :)

bluesman 15. 06. 2009. 16:51

Latvia stikes again:

Citat:

SELECT count( * ) AS val, b.area_code FROM `phone_allocations` a LEFT JOIN `area_codes` b ON a.`area_code_id` = b.`area_code_id` WHERE a.`area_code_id` IN (17, 121, 242, 295, 429, 242, 195, 429, 242, 295, 17, 429, 195, 106, 219, 322, 328, 471, 417, 471, 106, 328, 417, 471, 471, 470, 470, 72, 57, 225, 552, 326, 326, 225, 225, 552, 225, 322, 17, 505, 72, 72, 552, 113, 212, 114, 573, 9, 114, 212, 113, 212, 402, 26, 40, 48, 279, 320, 312, 560, 558, 48, 558, 320, 475, 560, 312, 48, 475, 48, 475, 320, 312, 7, 64, 501, 91, 280, 292, 232, 330, 502, 403, 8, 396, 525, 292, 8, 396, 403, 91, 390, 7, 403, 91, 403, 416, 330, 403, 403, 7, 144, 26, 6, 90, 479, 166, 496, 334, 144, 334, 406, 90, 479, 479, 144, 144, 6, 334, 144, 431, 15, 14, 255, 253, 433, 430, 256, 574, 379, 547, 378, 546, 380, 381, 432, 614, 171, 254, 379, 254, 15, 574, 547, 15, 574, 241, 431, 547, 15, 255, 379, 15, 254, 99, 74, 28, 191, 323, 348, 438, 96, 438, 323, 438, 28, 74, 28, 323, 28, 468, 467, 468, 468, 318, 28, 59, 348, 323, 124, 73, 49, 20, 148, 123, 146, 153, 264, 338, 321, 499, 416, 487, 536, 480, 293, 321, 124, 338, 73, 536, 480, 148, 49, 416, 499, 20, 153, 480, 264, 73, 148, 321, 480, 38, 2, 84, 81, 411, 561, 38, 76, 84, 2, 81, 73, 2, 587, 38, 561, 2, 81, 2, 42, 134, 154, 167, 422, 214, 214, 214, 588, 167, 214, 167, 588, 88, 458, 490, 50, 162, 162, 543, 88, 50, 50, 50, 88, 88, 50, 543, 46, 133, 54, 27, 35, 5, 129, 316, 460, 583, 35, 609, 54, 5, 461, 316, 46, 461, 133, 132, 609, 35, 132, 449, 35, 54, 384, 461, 5, 46, 46, 384, 384, 27, 384, 316, 132, 129, 132, 609, 35, 5, 133, 5, 188, 61, 187, 186, 304, 185, 24, 470, 304, 61, 470, 470, 313, 248, 186, 187, 351, 367, 188, 24, 187, 188, 461, 3, 386, 570, 476, 476, 570, 476, 570, 476, 3, 476, 476, 476, 476, 476, 476, 3, 570, 386, 3, 476, 476, 3, 570, 386, 476, 386, 191, 476, 476, 476, 476, 476, 386, 476, 476, 476, 570, 476, 476, 570, 32, 159, 44, 36, 400, 163, 583, 586, 462, 220, 220, 25, 32, 32, 586, 471, 462, 462, 538, 169, 260, 248, 282, 56, 37, 178, 195, 387, 425, 397, 554, 195, 178, 461, 609, 425, 461, 609, 295, 387, 609, 609, 195, 556, 56, 56, 178, 609, 387, 602, 602, 602, 602, 602, 602, 602, 13, 87, 80, 79, 206, 317, 401, 456, 585, 606, 504, 327, 80, 401, 456, 327, 13, 458, 504, 458, 206, 543, 456, 504, 327, 543, 80, 456, 327, 543, 327, 87, 87, 293, 401, 80, 504, 13, 34, 33, 58, 37, 1, 612, 240, 377, 377, 34, 37, 386, 58, 58, 240, 58, 34, 58, 33, 386, 437, 437, 437, 33, 240, 58, 34, 58, 437, 33, 386, 386, 34, 437, 189, 469, 237, 515, 349, 247, 247, 189, 469, 237, 469, 596, 4, 341, 164, 208, 204, 155, 239, 235, 358, 394, 418, 246, 439, 452, 444, 341, 442, 418, 204, 204, 164, 235, 201, 341, 235, 442, 239, 418, 461, 475, 385, 408, 475, 475, 475, 475, 385, 475, 475, 475, 475, 475, 475, 558, 475, 475, 475, 43, 122, 135, 125, 93, 224, 217, 267, 375, 423, 503, 581, 236, 224, 581, 43, 224, 224, 43, 43, 375, 581, 93, 310, 362, 161, 108, 63, 161, 176, 591, 342, 334, 314, 415, 412, 427, 393, 420, 399, 419, 506, 575, 550, 412, 393, 591, 550, 241, 415, 161, 63, 427, 591, 342, 161, 334, 412, 63, 334, 334, 567, 334, 334, 92, 251, 311, 564, 495, 57, 251, 251, 251, 564, 564, 495, 564, 251, 564, 495, 92, 350, 171, 171, 355, 347, 354, 65, 171, 353, 350, 355, 355, 65, 355, 171, 355, 355, 347, 353, 329, 441, 553, 468, 468, 577, 438, 468, 468, 318, 318, 329, 468, 318, 71, 522, 313, 126, 222, 505, 610, 18, 18, 18, 610, 18, 222, 18, 286, 286, 410, 376, 297, 324, 374, 407, 580, 569, 576, 299, 299, 580, 75, 299, 297, 580, 374, 580, 580, 580, 580, 11, 55, 193, 52, 150, 131, 192, 335, 413, 488, 603, 565, 587, 566, 335, 565, 413, 55, 587, 193, 55, 193, 470, 192, 52, 55, 52, 193, 488, 413, 603, 12, 78, 389, 467, 553, 389, 389, 389, 12, 78, 389, 154, 78, 389, 59, 259, 447, 491, 541, 445, 259, 252, 447, 259, 445, 252, 259, 445, 447, 541, 445, 447, 605, 147, 177, 231, 331, 398, 183, 449, 60, 398, 231, 60, 449, 135, 398, 205, 605, 205, 398, 183, 231, 147, 16, 53, 535, 82, 130, 215, 165, 404, 446, 563, 563, 404, 563, 404, 446, 130, 461, 32, 53, 215, 563, 69, 130, 535, 404, 563, 563, 563, 563, 461, 215, 281, 479, 281, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 360, 450, 559, 451, 491, 463, 278, 559, 559, 463, 313, 559, 451, 472, 463, 140, 555, 548, 472, 555, 140, 259, 472, 472, 140, 472, 472, 548, 472, 548, 25, 69, 104, 180, 152, 25, 180, 549, 400, 459, 25, 50, 549, 51, 160, 216, 250, 466, 597, 557, 567, 51, 557, 51, 216, 597, 51, 557, 160, 597, 466, 160, 557, 216, 466, 571, 216, 557, 466, 160, 557, 557, 571, 51, 597, 160, 386, 599, 51, 30, 136, 351, 357, 392, 454, 604, 30, 30, 454, 11, 599, 11, 454, 75, 141, 276, 367, 551, 244, 244, 551, 141, 75, 297, 367, 254) GROUP BY a.`area_code_id` ORDER BY val DESC LIMIT 50
A query treba da uradi otprilike ovo:
Citat:

SELECT COUNT(*) WHERE state='england'
I kada ga pitam:
why do you do that? diddn't we agree you will add column "state" in the area codes table ?

Tece razgovor ovako:
- not in area_codes table
- why not ?
- I think this kind of table should be mobile
- what is "mobile" ?
- flexible
- and you want it "flexible", whatever it means?
- yes

hoće da kaže kako su mu tabele normalizovane i ono što mu ja govorim da uradi nije "by the book". On ima tabele:
cities (city, country)
area_codes (city, area code)
pa pokupi sve cities za odredjeni country ("England") i onda za te cities, pokupi sve area codes i onda napravi ovaj IN (... )

I uporno odbija da uradi ono sto mu kazem jer tvrdi:

Citat:

If I give them the `state` row it wont be so dinamic .... some kind of code should track changes and do an update for updated area codes states or subcodes states
... i tu sam odustao jer sam prošli put proveo ceo dan da mu objasnim kako i zašto, samo sam mu dao "domaći" da napiše članak o denormalizaciji baze.

Citat:

Goran: and you think, one day someone will decide that one area code for London will be changed to Manchester, for example, or you think one day Manchester will not be in England any more- it will be in Wales ?
@dukacar: mister, ovaj će da dobije otkaz pošto ili me zajebava ili nešto žešće nije u redu sa njim kada on i ne kapira da je ovo loše i ne želi da ispravi. Ok je jednom, dva puta, pa i pet puta... ako skapiras o cemu se radi i ispravis gresku, ali ovaj me ladno zajebava :)

bluesman 15. 06. 2009. 16:59

I da, isti čovek mi je pre neki dan rekao kako mu smeta Smarty jer puca script zbog njega.

Onda sam provalio da je pokupio iz baze 30.000 recorda i onda hteo da ih prikaže na strani. Ako izuzmemo tu suludu ideju čak se nije potrudio ni da stavi assign_by_ref već sa assign pravi duplikate podataka, pa mu onda smeta smarty pošto mu prijavljuje da nema dovoljno memorije.

jablan 15. 06. 2009. 17:16

Citat:

Originalno napisao bluesman (Napišite 70659)
hoće da kaže kako su mu tabele normalizovane i ono što mu ja govorim da uradi nije "by the book".

A što je problem da doda i jedan JOIN na tabelu cities? Ne kapiram baš što baza mora da se denormalizuje...

razno 15. 06. 2009. 17:36

Citat:

Originalno napisao jablan (Napišite 70661)
A što je problem da doda i jedan JOIN na tabelu cities? Ne kapiram baš što baza mora da se denormalizuje...

Pri velikoj kolicini podataka dolazi do gubitka performansi zbog kreiranja temp tabeli.Recimo imas 10 000 zapisa i pri ovakvom upitu
Kôd:

a.`area_code_id` = b.`area_code_id`
mysql mora da "obrne" tj. proveri tih 10 000 zapisa. Recimo takav upit traje 0.0500 sec a dva razdvojena upita ukupno 0.0010 sec.
Nisam mozda najbolje objasnio ali EXPLAIN komanda bi trebalo da ti da bolji uvid.

Inace smarty nije bas dobar za posecene sajtove jer je glomazan i njegovo iniciranje traje dosta. Sdruge strane pun je mogucnosti, mada ja recimo preferiram Tenjin (sa mojim cache sistemom i organizacijom fajlova, defaultni mi se ne svidja)

bluesman 15. 06. 2009. 17:42

Inače, to za Smarty uopšte nije tačno, ali nema veze, nećemo sada o tome - slobodno otvori novu temu pa ćemo da pričamo i o tome.

jablan 15. 06. 2009. 18:49

@razno: Kapiram ja čemu u opštem slučaju služi denormalizacija, moje pitanje je bilo vezano za ovaj konkretan slučaj - koliko mi se čini u pitanju je običan šifarnik sa relativno malim brojem slogova. Tj, da li je probano prvo sa tim dodatnim JOIN-om (što bi svelo upit na dva reda) pa primećeno da se upit vuče?

bluesman 15. 06. 2009. 20:04

Ne znam da li sam dobro objasnio, moja poenta je "radi šta znaš, samo ne moj ovako kako je sada", ako će da radi denormalizaciju ili drugačije da napiše query - nije mi važno. U stvari, ono što je ovde najveći problem je to što ne prepoznaje da je ovo loše napisan query, a to mu se ponavlja stalno. A denormalizaciju sam mu spomenuo jer je počeo da mi objašnjava kako nije "knjiški" ako imaš polje state, kada već postoji "lookup tabela", odnosno da je baza normalizovana.

mangia 15. 06. 2009. 20:06

Citat:

Originalno napisao bluesman (Napišite 70659)
............. ili me zajebava ili nešto žešće nije u redu sa njim .........

Mene interesuje zasto pojedine brojeve navodi 5-6 puta...
npr 389 se ponavlja 6 puta, ....

Vjerovatno misli ako MySQL promaši prvi da pokupi drugi... :)

A vjerujem da ima više mjesta/opština sa istim kodom pa odatle duplikati...


Vreme je GMT +2. Trenutno vreme je 07:13.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.