Wypowiedzi
-
Dzięki za podpowiedź, kolumnę już próbowałem dodawać, dodanie trochę zwiększyło wydajność zapytania ale była to niewielka zmiana. Przetestuję dodanie indeksu i dam znać :)
-
Witam,
Mam tabelę "data" w której znajduje się około 3,5 miliona rekordów. Struktura tabeli wygląda następująco:
CREATE TABLE IF NOT EXISTS `data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`date` datetime NOT NULL,
`in` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`out` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`licences_id` int(11) NOT NULL,
`device` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `licences_id` (`licences_id`),
KEY `date` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Mam zapytanie które wyciąga dane z danego dnia pogrupowane po sformatowanej dacie:
SELECT DATE_FORMAT(`date`, "%H:00") AS `ym`, SUM(`in`) AS `value`
FROM `data` AS `d`
WHERE (device = '1') AND
(licences_id = '26') AND
(date >= '2014-09-26 00:00:00') AND
(date <= '2014-09-26 23:59:59')
GROUP BY `ym`;
Zapytanie na Raspberry PI wykonuje się około 4,6 s. Próbowałem już kilku optymalizacji jednak bez większych sukcesów. Czy macie może jakiś pomysł na optymalizację zapytania bądź struktury tabeli ? -
Witam,
Jako że dopiero zaczynam pracę z Symfony to napotykam co róż problemy, które staram się rozwiązywać we własnym zakresie, jednak nie mogę przeskoczyć problemu z definiowaniem listy access_control z bazy danych.
Mam zrobioną autoryzację z wykorzystaniem firewall-a i teraz należało by zabezpieczyć odpowiednio określone części serwisu dla określonych grup użytkowników. Z tego co znalazłem w dokumentacji można to zrobić z wykorzystaniem access_control, jednak lista ta jest definiowana w pliku security.yml ja zaś bym chciał robić to z poziomu bazy danych aby stworzyć interfejs do zarządzania uprawnieniami.
Czy jest możliwe definiowanie tej listy w bazie ? Jak ugryźć ten problem ? -
Witam,
Mam problem z odtwarzaczem plików wideo z napisami z dysku komputera. Mianowicie mam kod HTML
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Player</title>
</head>
<body style="margin: 0; padding: 0;">
<video width="100%" height="100%" id="player" controls="controls">
<source src="echo-hereweare.mp4" type="video/mp4">
<source src="echo-hereweare.webm" type="video/webm">
<track kind="subtitles" src="video-subtitles-en.vtt" srclang="en" label="English" />
<p>Your browser leaves much to be desired.</p>
</video>
</body>
</html>
Kod ma za zadanie wyświetlić plik wideo wraz z napisami, jednak o ile sam film się wyświetla o tyle próba włączenia napisów w Chrome kończy się niepowodzeniem, konsola daje komunikat mówiący o braku uprawnień:
Text track from origin 'file://' has been blocked from loading: Not at same origin as the document, and parent of track element does not have a 'crossorigin' attribute. Origin 'null' is therefore not allowed access.
Tylko jak to obejść dodanie bowiem crossorigin do elementu video tylko pogarsza sprawę. -
Dzięki to rozwiązuje mój problem. Wiedziałem o istnieniu tego parametru jednak nie miałem pojęcia że to działa w ten sposób, czy mógłbyś rzucić nieco światła dlaczego to tak działa ?
-
Witam,
Mam problem z przenoszeniem elementów pomiędzy dwoma kontenerami. Jeden kontener zawiera listę elementów, z nich wybieram jeden i chcę go przeciągnąć do drugiego kontenera w którym mapa na której chcę umieścić element. Niestety pierwszym problemem jest to że po przeciągnięciu mapa nieco skacze w dół, a kolejnym że nie mogę umieszczonego elementu na mapie przesunąć, gdyż powoduje to z duplikowanie go.
Rozumiem że przesunięcie elementu na mapie powoduje ponowne wywołanie funkcji drop i to dlatego pojawia się nowy element jednak nie mam pomysłu jak elegancko to rozwiązać, może ktoś posłuży radą ?
Działającą wersję zobaczycie pod linkiem.
A kod poniżej:
<div id="map">
<img src="http://mapa-polski.seda.pl/mapy-polski/fizyczna1.jpg" />
</div>
<div id="elements">
<div class="el">el1</div>
<div class="el">el2</div>
<div class="el">el3</div>
</div>
<script type="text/javascript">
var $elements = $('#elements'),
$map = $('#map');
$( ".el", $elements ).draggable({
revert: "invalid",
helper: "clone",
cursor: "move"
});
$map.droppable({
activeClass: "ui-state-default",
hoverClass: "ui-state-hover",
drop: function( event, ui ) {
var $newPosX = parseInt(ui.offset.left) - parseInt($(this).offset().left);
var $newPosY = parseInt(ui.offset.top) - parseInt($(this).offset().top);
var el = $( "<span></span>")
.addClass('el')
.css('top', $newPosY + 'px')
.css('left', $newPosX + 'px')
.text( ui.draggable.text() )
;
el.draggable();
el.prependTo( this );
}
});
</script>
-
Wygląda na to że kliknięcie nie przestawia klasy "active" na aktualnie kliknięty element. Należy zlokalizować skrypt odpowiedzialny za zakładki i ustalić co należy zmodyfikować aby mechanizm działał prawidłowo.
-
Jeśli używasz Chrome to naciskając F12 wyświetlą Ci się narzędzia deweloperskie w których jest konsola. Za jej pomocą można zobaczyć czy różne rzeczy zaś w Twoim przypadku zapewne będzie to poszukiwanie skryptu, który powoduje błąd.
Jeśli nie używasz Chrome to także powinno pojawić się jakieś narzędzie dla deweloperów w którym powinna być konsola. -
A czy po kliknięciu w inną zakładkę "otwiera" się dana zakładka ? Czy tylko podświetlenie nie działa ? Sprawdź w konsoli czy nie wystąpił jakiś błąd.
-
Witam,
Chciałem się spytać czy może ktoś coś powiedzieć na temat tej inwestycji ? Polecacie, odradzacie, a może ktoś mieszka ? Będę wdzięczy za wszystkie odpowiedzi. -
Witam,
Poszukuję osoby, która napisała by moduł odpowiedzialny za integrację aplikacji z FreshMailem. Idealnie gdyby zainteresowana osoba posiadała już doświadczenie w w tym temacie. Wszystkie osoby zainteresowane zleceniem proszę na priv.
Pozdrawiam,
Marcin Lewandowski -
Witam,
Przepraszam że wcześniej nie wrzuciłam tak podstawowych danych które umożliwiły by wam łatwe przetestowanie własnych zapytań oraz porównanie ich z moim pomysłem na rozwiązanie problemu.
Struktura bazy
CREATE TABLE IF NOT EXISTS `pole` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nazwa` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
CREATE TABLE IF NOT EXISTS `subskrybent` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(200) NOT NULL,
`imie` varchar(200) NOT NULL,
`nazwisko` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `subskrybent_grupa` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`subskrybent_id` int(11) NOT NULL,
`nazwa` varchar(200) NOT NULL,
PRIMARY KEY (`id`),
KEY `subskrybent_id` (`subskrybent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
CREATE TABLE IF NOT EXISTS `subskrybent_grupa_pole` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`subskrybent_grupa_id` int(11) NOT NULL,
`pole_id` int(11) NOT NULL,
`wartosc` varchar(200) NOT NULL,
PRIMARY KEY (`id`),
KEY `subskrybent_grupa_id` (`subskrybent_grupa_id`,`pole_id`),
KEY `pole_id` (`pole_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
INSERT INTO `subskrybent` (`id`, `email`, `imie`, `nazwisko`) VALUES
(1, 'jan.kowalski@gmail.com', 'Jan', 'Kowalski'),
(2, 'franciszek.nowak@gmail.com', 'Franciszek', 'Nowak');
INSERT INTO `pole` (`id`, `nazwa`) VALUES
(1, 'Miejscowość'),
(2, 'Kod pocztowy'),
(3, 'Wiek');
INSERT INTO `subskrybent_grupa` (`id`, `subskrybent_id`, `nazwa`) VALUES
(1, 1, 'Grupa 1'),
(2, 1, 'Grupa 2'),
(3, 1, 'Grupa 3'),
(4, 2, 'Grupa 1'),
(5, 2, 'Grupa 2'),
(6, 2, 'Grupa 3');
INSERT INTO `subskrybent_grupa_pole` (`id`, `subskrybent_grupa_id`, `pole_id`, `wartosc`) VALUES
(1, 1, 1, 'poznań'),
(2, 1, 2, '00-000'),
(3, 2, 1, 'kraków'),
(4, 3, 1, 'poznań'),
(5, 3, 2, '99-999'),
(6, 4, 1, 'łódź'),
(7, 5, 1, 'kraków'),
(8, 5, 3, '29'),
(9, 6, 1, 'poznań'),
(10, 6, 2, '99-999');
ALTER TABLE `subskrybent_grupa`
ADD CONSTRAINT `subskrybent_grupa_ibfk_1` FOREIGN KEY (`subskrybent_id`) REFERENCES `subskrybent` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `subskrybent_grupa_pole`
ADD CONSTRAINT `subskrybent_grupa_pole_ibfk_1` FOREIGN KEY (`subskrybent_grupa_id`) REFERENCES `subskrybent_grupa` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `subskrybent_grupa_pole_ibfk_2` FOREIGN KEY (`pole_id`) REFERENCES `pole` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Podgląd danych:
SELECT s.imie, s.nazwisko, sg.nazwa grupa, p.nazwa, sgp.wartosc
FROM `subskrybent` s
INNER JOIN subskrybent_grupa sg ON s.id = sg.subskrybent_id
INNER JOIN subskrybent_grupa_pole sgp ON sgp.subskrybent_grupa_id = sg.id
INNER JOIN pole p ON sgp.pole_id = p.id
ORDER BY s.id, sg.nazwa
Wyszukiwanie:
SELECT * FROM (SELECT s.imie, s.nazwisko, sg.nazwa grupa, p.nazwa, sgp.wartosc, count(sgp.subskrybent_grupa_id) AS ilosc_pol
FROM `subskrybent` s
INNER JOIN subskrybent_grupa sg ON s.id = sg.subskrybent_id
INNER JOIN subskrybent_grupa_pole sgp ON sgp.subskrybent_grupa_id = sg.id
INNER JOIN pole p ON sgp.pole_id = p.id
WHERE
(sgp.pole_id = '1' AND sgp.wartosc = 'poznań') OR
(sgp.pole_id = '2' AND sgp.wartosc = '00-000')
group by sgp.subskrybent_grupa_id) AS pola WHERE ilosc_pol = 2
Wyszukiwanie nie wydaje mi się na zbyt optymalne i samej struktury bazy też w stu procentach nie jestem pewien. Wydaje mi się to rozwiązanie dość elastyczne pytanie tylko jak się zachowa ta struktura, gdy załaduje się tam kilka milionów rekordów. Jakieś pomysły na przeprowadzenie testów oraz modyfikacji zapytań i struktury ? -
Witam,
Chciałem się dowiedzieć w jaki sposób byście ugryźli przeszukiwanie struktury bazy danych, która wygląda w następujący sposób, mamy tabele:
- subskrybent,
- subskrybent_grupa
- subskrybent_grupa_pole
- pole
Połączenie tych tabel wygląda w ten sposób że do każdego subskrybenta jest przypisana grupa pól np.
Jak Kowalski
+ Grupa1: (pole1:poznań, pole2:00-000)
+ Grupa2: (pole1:kraków)
+ Grupa3: (pole1:poznań, pole2:99-999)
Franciszek Nowak
+ Grupa1: (pole1:łódź)
+ Grupa2: (pole1:kraków, pole3: 29lat)
+ Grupa3: (pole1:poznań, pole2:99-999)
I teraz jak efektywnie przeszukać taką strukturę kiedy użytkownik wprowadził kryteria wyszukiwania:
Opcja1: pole1:poznań (oczekiwany rezultat: Jan Kowalski, Franciszek Nowak)
Opcja2: pole1:poznań, pole2:00-000 (oczekiwany rezultat: Jan Kowalski)
-
Przede wszystkim chciałem podziękować wszystkim za wypowiedzi :)
Postaram się zgłębić temat node.js oraz socket.io, gdyż wygląda to bardzo interesująca zwłaszcza, że jest to serwer dedykowany do tej aplikacji i mogę tam wrzucić wszystko co mi się podoba i będzie działać pod wingrozę ;)
Na razie jest to rozwiązane tak jak pisałem w pierwszym poście czyli requesty do odpowiednich skryptów, które od razu wypluwają odpowiedniego html-a i go doklejam do tabeli, działa to dobrze jedyne co to jeszcze muszę zadbać o ograniczenie rozrostu drzewa DOM. -
Witam,
Potrzebuję stworzyć mechanizm ciągłego doładowywania elementów tabeli bez przeładowywania strony. Jedyny mój pomysł to ciągłe wysyłanie żądań HTTP odbierających dane w JSON i ta tej postawie dodawanie nowych wierszy na początku tabeli.
Chodzi mi o osiągnięcie efektu "wpadania" nowych rekordów na sam początek tabeli tak jak jest to zrobione np. w strumieniu G+ czy Facebook. Polecacie jakieś rozwiązania ?
Pozdrawiam,
Marcin -
Jakoś tak powinno to iść:
$w->update(
array('rds_pozycja' => new Zend_Db_Expr('rds_pozycja - 1')),
array('rds_pozycja = ?' => $row['rds_pozycja'], 'rds_id = ?' => $id, 'rds_server = ?' => $sess->id)
);
-
Zmień nazwę na Zend_View_Helper_User i powinien znaleźć.
-
A nie lepiej z helpera widoku zwracać info czy zalogowany czy nie ?
<?php if($this->zalogowany()): ?>
... kod HTML ...
<?php endif; ?>
-
Ciekawe ogłoszenie, które kolejny raz pokazuje mi że muszę zainwestować w naukę angielskiego ;) Nie samym czytaniem dokumentacji człowiek żyje ;)
-
Mirosław
Ma się tworzyć, ale tylko wtedy gdy lista auto uzupełniania nie jest rozwinięta. Jednak teraz wygląda to w ten sposób, że po wybraniu elementu z auto uzupełniania i naciśnięciu enter w celu zatwierdzenia wyboru wartość pola jest ustawiana oraz jest tworzony nowy wiersz. Tak nie powinno być, gdyż ten enter miał dokonać tylko wyboru z listy.
Dariusz
Korzystam z jQuery, a zdarzenie utworzenia wiersza jest podpięte pod keyup. Zasadniczo pomysł wydaje się dobry jednak mam podpięte zdarzenie tworzenia nowego wiersza nie tylko w polach z auto uzupełnianiem i chciałbym, aby to zdarzenie działało nawet gdy użytkownik ma pole puste.