problem s mySQL zaqwka

7 отговора 310 прегледа
#1

problem s mySQL zaqwka

Zdrawejte na wsichki
Imam slednata postanowka.
Imam mySQL baza i w neq syshtestwuwa tablica w, koqto bi trqbwalo da sydyrva po edin zapis za wseki mesec w opredelen interwal ot godini kato tazi informaciq se pazi za N na broj obekti. Da no ne za wseki mesec syshtestwuwa zapis i se interesuwam kak moga da nameerq lipswashtite mesecu za wseki ot N-te obekta. Loshoto e che tablicata e ogromna i zaqwkite, skoito se opitwam da rabotq se izpylnqwat twyrde bawano.

Ima linqkakyw efektiwen nachin - ne uspqh da namerq w dokumentaciqta na mySQL da namerq podhodqshti date time funkcii.
Misliteli che stored procedure bi podobrila rabotata?

Отговор
в отговор на timshel #2

Re: problem s mySQL zaqwka

1. MySQL -> сторед процедури, ако не ме лъже паметта след 5
2. Колко огромна е таблицата, че толкова се бавят заявките ?
1000 обекта * 10 години * 12 месеца = 120000 реда, нищо и половина.

До тук със съветите.
Я дай сега структурата на таблицата да видим какъв мъдър JOIN със having NULL ще измислим .....

Имаш ли някакъв език с който да можеш да правиш програмно по няколко заявки или ти трябва ЧИСТ SQL ?
Да кажем нещо от сорта на php, perl или каквото и да е там ?

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на timshel #3

Re: следвайки Рошавата логика ...

CREATE TABLE months (m TINYINT UNSIGNED);
INSERT INTO hr VALUES(1), (2), (3), (4), (5), (6), (7), (8), (9), (10),(11), (12);


SELECT m FROM
months LEFT JOIN your_tbl
ON (m = MONTH(ts))
WHERE ts IS NULL;

Предполагайки, че твоята таблица се казва your_tbl и в нея има колонка ts тип TIMESTAMP или DATETIME или DATE все тая ...

salle.online.bg/sig
Отговор
в отговор на timshel #4

Re: и вземи да пишеш на български

.

salle.online.bg/sig
Отговор
в отговор на salle #5

Re: следвайки Рошавата логика ...

Мнеее, де да беше DATETIME или DATE ама не е. Структурата е следната

| user_id | year | month | info |

Значи, за всяко user_id има няквкаи записи - за една година и месец нямаповече от един запис т.е. ако съществува е само един за двойката месец-година, но има липсващи месеци, което ще значи че за даден месец и година просто няма запис - мен ме интересуват тези месеци.

Да - работя с PHP като добавка.

А предложението с допълнителната таблица наистина може да свърши работа

Редактирано от timshel на

Отговор
в отговор на timshel #6

Re: следвайки Рошавата логика ...

Че то така още по-просто!

salle.online.bg/sig
Отговор
в отговор на salle #7

Re: следвайки Рошавата логика ...

Нещо такова .....:
без допълнителна таблица:

<?
mysql_connect(.....);
mysql_select_db(....);
$start_m = 1;
$start_y = 2000;
$end_m = 12
$end_y = 2004
$expected_full_result = ($end_y*12 + $end_m) - ($start_y*12+$start_m);
$res = mysql_query("select count(*) as cnt, user_id from table where cnt<$expected_full_result group by user_id"); // филтър за тези които нямат фулл инфо
$missings = array();
while ($row = mysql_fetch_array($res)){
$missings[] = $row[1];
}
foreach($missings as $id){
......
}
?>

Това ще ти даде id-тата които нямат пълно инфо
Нещо такова ще свърши ли работа, че да го допиша ?

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #8

Re: следвайки Рошавата логика ...

нещо такова беше моето първо ресхение, обаче бачка бавно.
Допълнителнаа таблица определно ускори нещата.

Мерси :)

Отговор