2017-02-17 10 views
0

Ich versuche Asterisk CDR-Datensätze von MySQL-Tabelle (5.5.45) von CONNECT-Engine auf anderen Server mit MariaDB (10.0.29) zu bekommen.MariaDB - CONNECT ENGINE - ORDER BY Fehler

kann ich die Verbindung zwischen Tabelle erstellen leicht:

CREATE TABLE `calls` engine=CONNECT table_type=MYSQL 
CONNECTION='mysql://[email protected]/asteriskcdrdb/calls'; 

Wenn ich einfach SELECT * FROM Anrufe laufen, alles gut funktioniert, wenn ich einige WHERE Bedingungen, noch alles in Ordnung hinzuzufügen.

Aber das Problem beginnt, wenn ich ORDER BY Spalte Parameter hinzufügen, dann habe ich diesen Fehler von MariaDB:

#1032 - Can't find record in 'calls' 

Ich habe MySQL log, log MariaDB - es gibt überhaupt keine Fehler.

Habe ich etwas übersehen?

Vielen Dank!

Update: Die ganze Frage ist einfach:

SELECT * FROM `calls` ORDER BY `calldate` 

Die Tabellenstruktur:

CREATE TABLE `calls` (
    `calldate` datetime NOT NULL default '0000-00-00 00:00:00', 
    `clid` varchar(80) NOT NULL default '', 
    `src` varchar(80) NOT NULL default '', 
    `dst` varchar(80) NOT NULL default '', 
    `dcontext` varchar(80) NOT NULL default '', 
    `channel` varchar(80) NOT NULL default '', 
    `dstchannel` varchar(80) NOT NULL default '', 
    `lastapp` varchar(80) NOT NULL default '', 
    `lastdata` varchar(80) NOT NULL default '', 
    `duration` int(11) NOT NULL default '0', 
    `billsec` int(11) NOT NULL default '0', 
    `disposition` varchar(45) NOT NULL default '', 
    `amaflags` int(11) NOT NULL default '0', 
    `accountcode` varchar(20) NOT NULL default '', 
    `uniqueid` varchar(32) NOT NULL default '', 
    `userfield` varchar(255) NOT NULL default '', 
    `recordingfile` varchar(255) NOT NULL default '', 
    `cnum` varchar(40) NOT NULL default '', 
    `cnam` varchar(40) NOT NULL default '', 
    `outbound_cnum` varchar(40) NOT NULL default '', 
    `outbound_cnam` varchar(40) NOT NULL default '', 
    `dst_cnam` varchar(40) NOT NULL default '', 
    `call_charge` float NOT NULL default '0', 
    `from_did` varchar(30) NOT NULL, 
    `did` varchar(50) NOT NULL default '', 
    `user_id` int(8) unsigned default NULL, 
    `client_id` int(8) unsigned default NULL, 
    KEY `IDX_UNIQUEID` (`uniqueid`), 
    KEY `src` (`src`), 
    KEY `dst` (`dst`), 
    KEY `calldate` (`calldate`), 
    KEY `uniqueid` (`uniqueid`), 
    KEY `userfield` (`userfield`), 
    KEY `from_did` (`from_did`), 
    KEY `user_id` (`user_id`), 
    KEY `client_id` (`client_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Update # 2: aktualisieren die Tabellennamen, um nicht zu verwechseln, aber Es ist nicht das Problem. Die CONNECTION-Tabelle ist in Ordnung erstellt.

Abfrage funktioniert:

SELECT * FROM `calls` 

Abfrage funktioniert:

SELECT * FROM `calls` WHERE `user_id`=X 

Abfrage Rückkehr Fehler:

SELECT * FROM `calls` ORDER BY `calldate` 

Update # 3: Die MySQL wurde auf Veriosn 5.5.45 aktualisiert, der Typ wurde in InnoDB geändert und der Zeichensatz wurde in UTF8 konvertiert. Aber kein Erfolg.

Problem gelöst Nun, es ist MariaDB Fehler, wenn ich FederatedX Motor geändert (die im Grunde wenig eingeschränkte Version von CONNECT ist), funktioniert alles wie erwartet.

+0

Können Sie die vollständige Abfrage und ein Beispiel für die Tabelle hinzufügen? –

+0

@DaniloBustos Mein ursprünglicher Beitrag wurde aktualisiert, sorry. –

+0

Der Tabellenname ist 'cdr'? –

Antwort

1

In Ihrer Anfrage tun Sie SELECT * FROM calls

aber in Ihrer Tabellenstruktur Sie haben TABLE cdr

CREATE und beide haben calldate Spalt. Überprüfen Sie, ob Sie die richtige Tabelle abfragen.

+0

Es ist die Tabelle auf Asterisk-Server, aber wenn ich CONNECT verwende, ist in den Definitionen 'CREATE TABLE calls' ... aus Verbindungszeichenfolge 'mysql: // user @ IP/asteriskcdrdb/cdr' –

+0

Wenn cdr eine Datenbank ist , SELECT * FROM cdr.calls ORDER BY 'calldate' –

+0

cdr ist Tabelle auf einem anderen Server. CONNECT-Engine ist wie Fernansicht. So erstellen Sie Tabelle "Anrufe", die funktioniert, bis ORDER BY hinzugefügt wird. –