MQTT und SQL Server auf gleicher Ubuntu Server VM?

Ich betreibe einen MQTT Server (Mosquitto Broker) innerhalb einer Ubuntu Server Distribution innerhalb einer VM und würde gern einen Microsoft SQL Server in der gleichen VM laufen lassen um die Daten, die an den MQTT-Broker geschickt zu werden speichern zu können.

  1. Frage: Ich kann beide Server installieren und diese laufen auch parallel, aber wie stelle ich von außen bei Anfragen sicher, den richtigen Server zu erwischen? Weil die Server IP ist bei beiden gleich, wird das nur über den Port geregelt ? (MQTT: 1883 und MS-SQL Server: 1433 ?)
  2. Ich habe ein Pyhton Skript, welche alle MQTT Topics abonniert und die Daten in die Datenbank schreibt. Wie sorge ich dafür, dass dieses in Dauerschleife für immer ausgeführt wird und parallel zu den beiden Servern vom Betriebssystem ausgeführt wird? (Habe bereits Python Entwicklungsumgebung installiert, und kann Skripte einfach so ausführen), Klar kann ich da ne Dauerschleife reinprogrammieren, aber wie bediene ich dann parallel den Rest? Somit kommen wir zu Frage 3:
  3. Wie kann ich mir MQTT Server Konsole, SQL-Server Konsole und Ausgaben des Python Skript gleichzeitig anzeigen lassen? (Ubuntu Server nur in Terminalversion, keine grafische Benutzeroberfläche)

Bin offensichtlich nicht so vertraut mit Linux und habe das Gefühl mir würden nur ein paar Grundlagen fehlen..
Hoffe ihr könnt mir helfen, danke!

Server, Computer, Linux, SQL, Ubuntu, Datenbank, Python
Falsche Zeiten PHP?

ich habe hier diesen kleinen code um besucherzahlen von webseiten zu verarbeiten, dabei muss der code den jeweiligen zeitbereich ausrechnen in dem die datenabnkeinträge abgefragt werden, sldo wenn ich den programm diese woche oder gestern usw. gebe sucht es mit alle einträge aus der datenbank raus mit allen unix zeitstempeln die in den zeitabschnitt passen, allerdings sieht es bei mir so aus als ob beim zeitabschnitt diese woche immer die gleichen Werte ausgegeben werden wie bei heute, was stimmt an der berechnung nicht?
mein sql sieht so aus:

 SELECT * FROM $db_table WHERE unix > ? AND unix < ?

wobei die variable $i das erste fragezeichen ausfüllt und $t das zweite

hier ist der php abschnitt der dafür zuständig ist, warum ereechnet es bei heute und diese woche immer den gleichen zeitabschnitt?

if($period == "last_30_minutes"){
  $period = "Last 30 minutes";
  $i = $time - 1800;
} elseif ($period == "today"){
  $str = date("d-m-Y 00:00");
  $i = strtotime($str);
} elseif ($period == "yesterday"){
  $period = "Yesterday";
  $i= intdiv($time, 86400);
  $i = $i - 1;
  $i = $i * 86400;
  $str = date("d-m-Y 00:00");
  $t = strtotime($str);
} elseif ($period == "week") {
  $multiplier = date("w");
  if ($multiplier == 0){
    $multiplier = 7;
  }
  $multiplier = $multiplier - 1;
  $w = date("G") * 3600 + date("i") * 60 + date("s") + $multiplier * 86400;
  $i = $time - $w;
} elseif ($period == "month"){
  $period = "Month";
  $str = "01-" . date("m-Y");
  $i = strtotime($str);
}
Server, Computer, Mathematik, SQL, Webseite, Programmieren, Berechnung, Datenanalyse, Informatik, MySQL, PHP
SQL effizientes mehrdimensionales Histogramm erstellen?

Hallo,

ich habe folgende SQL Tabelle und würde aus dieser mit SQL Abfragen gerne ein mehrdimensionales Histogramm erzeugen.

Meine Tabelle:

`sex` => VARCHAR(1), //für Geschlecht

`age` => INT,

`salary` => INT

Gefüllt könnte z.B. so aussehen (aber mit viel(!) mehr Einträgen natürlich):

Am ende will ich mit meiner Abfrage folgende Ausgabe erzielen:

Wie man in der obigen Ausgabe sieht, will ich die Bereiche bei age und salary nicht(!) gleich verteilen. Alle Lösungen welche also immer in 10er Schritten gehen, funktionieren in meinem Fall nicht. Die "..." Zeile in der Ausgabe soll andeuten, dass die Bereiche bei F(emale) einfach nach der selben Logik (aber vielleicht mit unterschiedlichen Bereichsbreiten) weitergehen. Daran schließt sich dann M(ale), mit den gleichen Bereichen wie F(emale) an. Count gibt jeweils die Anzahl der gefundenen Einträge zu den gegebenen Einschränkungen an. Also z.B. für den ersten Fall sowas wie

SELECT COUNT(*) from `companysalaries` WHERE age >= 18 AND age <= 19 AND salary >= 0 AND salary <= 999 AND sex='F';

Mein bisheriger (funktionierender) Ansatz war:

  1. Stored procedure erstellen
  2. temporary tables als Hiflstabellen mit Bereichen füllen und Hilfstabelle für Ausgabe erstellen
  3. 3-fach geschachtelete WHILE schleife mit Select und INSERT in einen Ausgabetabelle

JETZT ZUR EIGENTLICHEN FRAGE:

Mir kommt meine bisherige Lösung sehr ineffizient vor (54 Zeilen :/), und ich denke mir, dass man ja eigentlich in so einer schönen Sprache wie SQL dieses Problem doch einfacher lösen können müsste. Meine Lösung habe ich auch schon mehrmals überarbeitet, aber ohne die Leserlichkeit aufzugeben, komme ich nicht wesentlich unter die 54 Zeilen. Daher die Frage, ob das irgendwie besser, effizienter und/oder kürzer geht. Die Lösung sollte zudem nur(!) SQL enthalten und keine sonstigen Erweiterungen benötigen/nutzen.

Danke im Voraus für alle Antworten

whgoffline

SQL effizientes mehrdimensionales Histogramm erstellen?
Computer, Technik, SQL, Programmieren, Datenbank, Informatik, Technologie
SQL-Quelltext?

Habe ich die Queltext richtg gemacht?

Drop TABLE FAVORISIEREN;
Drop TABLE MIETET;
Drop TABLE BENUTZER;
Drop TABLE FAHRZEUG;
Drop TABLE ANBIETER; 
CREATE TABLE ANBIETER( 
ID_A int NOT NULL,
Name1 varchar (30), 
Constraint PK_Anbieter Primary KEY(ID_A)); 
CREATE TABLE FAHRZEUG(
Fahrzeugkennnummer int NOT NULL,
Fahrzeugtype varchar (20), 
MieteProKm number, 
MieteProMin number, 
Mindestalter int, 
Constraint muss_grosse_18_sein check (Mindestalter >18),
ID_A int, 
Constraint PK_Fahrzeugkennnummer Primary Key (Fahrzeugkennnummer),
Constraint FK_ID_A Foreign Key (ID_A) REFERENCES Anbieter (ID_A)); 
CREATE TABLE BENUTZER(
Kundennummer int NOT NULL,
Name2 varchar (30), 
Führerschein varchar (30),
Geburtsdatum date, 
Constraint PK_Benutzer Primary Key (Kundennummer)); 
CREATE TABLE MIETET(
AuftragsNummer int Not NULL,
Fahrzeugkennnummer int,
Kundennummer int,
Datum date,
Constraint PK_AuftragsNummer Primary Key (AuftragsNummer),
Constraint FK_Fahrzeugkennnummer Foreign Key (Fahrzeugkennnummer) REFERENCES FAHRZEUG(Fahrzeugkennnummer),
Constraint FK_Kundennummer Foreign Key (Kundennummer) REFERENCES BENUTZER (Kundennummer)); 
CREATE TABLE FAVORISIEREN(
Kundennummer number NOT NULL,
Fahrzeugkennnummer int,
Constraint PK_Kundennummer12 Primary Key (Kundennummer),
Constraint FK_Fahrzeugkennnummer12 Foreign Key (Fahrzeugkennnummer) References Fahrzeug (Fahrzeugkennnummer));
SQL-Quelltext?
Computer, SQL, Programmieren, Datenbank
Hilfe bei SQL-Anweisung?

Habe ich die Aufgabe richtig gelöst?

Meine Lösung:

Drop TABLE HEALT;

Drop TABLE PROF;

Drop TABLE STUDENT;

Drop TABLE FACH;

CREATE TABLE FACH(

ID int primary key,

Name varchar(50));

CREATE TABLE STUDENT(

ID1 int primary KEY,

ID int ,

Note int);

CREATE TABLE PROF(

ID2 int primary Key,

Name1 varchar(50));

CREATE TABLE HAELT(

ID2 int NOT NULL,

ID int NOT NULL,

Primary key (ID2,ID));

INSERT INTO FACH

VALUES (1,'Logistik');

INSERT INTO FACH

VALUES (2,'DatenBank');

INSERT INTO FACH

VALUES (4,'PM2');

INSERT INTO FACH

VALUES (3,'QM');

Select * FROM FACH;

INSERT INTO Student

VALUES (1,1,2);

INSERT INTO STUDENT

VALUES (3,1,1);

INSERT INTO STUDENT

VALUES (2,2,3);

INSERT INTO STUDENT

VALUES (4,2);

INSERT INTO STUDENT

VALUES (5,2,1);

INSERT INTO STUDENT

VALUES (6,3,2);

INSERT INTO STUDENT

VALUES (7,2,2);

INSERT INTO STUDENT

VALUES (8,2,4);

INSERT INTO STUDENT

VALUES (9,2,5);

SELECT * FROM STUDENT;

SELECT * FROM STUDENT ORDER BY Note DESC;

SELECT ID1 FROM STUDENT WHERE ID=2;

SELECT count(ID1) FROM STUDENT WHERE ID=2;

SELECT AVG (note) FROM STUDENT GROUP BY ID1;

SELECT AVG (note) AS Durchschnitt_Alle_Noten FROM STUDENT WHERE ID=2;

INSERT INTO PROF

VALUES (1,'SCHMIDT');

INSERT INTO PROF

VALUES (2,'Makki');

SELECT * FROM STUDENT,FACH,PROF,HAELT WHERE Fach.ID=Student.ID AND healt.ID2=Prof.ID2 AND Fach.ID=Haelt.ID and ID2=SCHMIDT;////Wieder kommen

SELECT Name FROM FACH,STUDENT WHERE Fach.ID=Student.ID GROUP BY Name HAVING count(note)>3 ;

Hilfe bei SQL-Anweisung?
SQL, Programmieren, Datenbank, Informatik
SQL eine Spalte hinzufügen zu einer Unterabfrage?

Hallo liebe Community,

ich habe folgende SQL Query:

SELECT l1.lnr, l1.lname 
	FROM lieferant l1
	WHERE NOT EXISTS 
		(SELECT l1.lnr 
			FROM lieferung l2 
			WHERE l1.lnr = l2.lnr
		)
;

Als Output bekomme ich die folgende, auch erwartete, Relation:

lnr    lname
4      Gießerei AG

Nun möchte ich dieser Relation eine Spalte anzahl hinzufügen die den Wert 0 hat. Also wollte ich erstmal eine Spalte hinzufügen und zwar folgendermaßen:

ALTER TABLE
	(SELECT l1.lnr, l1.lname 
		FROM lieferant l1
		WHERE NOT EXISTS 
			(SELECT l1.lnr 
				FROM lieferung l2 
				WHERE l1.lnr = l2.lnr
			)
	 )
ADD COLUMN anzahl integer;

Hier bekomme ich bereits folgenden Fehler:

ERROR: FEHLER:  Syntaxfehler bei »(«
LINE 2:  (SELECT l1.lnr, l1.lname

Die Klammern wegzulassen hat auch nichts gebracht.

Weitermachen wollte ich dann eigentlich folgendermaßen: Wenn es geklappt hätte mit dem Hinzufügen von der Spalte anzahl dann wollte ich jetzt in diese Spalte den Wert 0 einfügen also einfach:

ALTER TABLE
	(SELECT l1.lnr, l1.lname 
		FROM lieferant l1
		WHERE NOT EXISTS 
			(SELECT l1.lnr 
				FROM lieferung l2 
				WHERE l1.lnr = l2.lnr
			)
	)
ADD COLUMN anzahl integer DEFAULT 0;

Dann nochmal:

SELECT * FROM	
	(ALTER TABLE
		(SELECT l1.lnr, l1.lname 
			FROM lieferant l1
			WHERE NOT EXISTS 
				(SELECT l1.lnr 
					FROM lieferung l2 
					WHERE l1.lnr = l2.lnr
				)
		)
	ADD COLUMN anzahl integer DEFAULT 0
	)
;

Und rauskommen sollte eigentlich:

lnr    lname        anzahl
4      Gießerei AG  0

Was mache ich falsch? Ich benutze PostgreSQL mit pgAdmin 4.

Computer, SQL, Programmieren, Datenbank, Informatik, PostgreSQL
Verbindung zur Datenbank checken - PHP?

Hi, ich hab folgende Funktion in einer Klasse dbConenction:

private mixed $connection;

public function __construct()
{
    return $this->connect();
}

private function connect()
{
    try {
        $host = "localhost";
        $username = "USER_NAME";
        $pwd = "PWD";
        $database = "DB_NAME";
        $this->connection = new mysqli($host, $username, $pwd, $database);

        if ($this->connection->connect_error) {
            throw new Exception("Connection to database failed. | " . $this->connection->connect_error);
        }
        return $this->connection;
    } catch (Exception $exception) {
        $this->connection = null;
        databaseErrorHandling($exception);
        return null;
    }
}

Die Verbindung zur Datenbank funktioniert auch, ich kann Queries ausführen. Doch mein Problem, wenn ich zum Beispiel den Username für die Datenbank ändere, soll eigentlich durch

if ($this->connection->connect_error)

eine Exception geworfen werden, weil die Verbindung ja nicht aufgebaut werden kann, da der Username falsch ist. Das Gleiche funktioniert auch nicht, wenn ich zum Beispiel das Passwort ändere. Hab in den Docs von PHP nachgelesen und dort haben die das genauso gemacht...

$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

Jemand eine Idee, warum das nicht funktioniert, so wie es funktionieren sollte :D, oder Verbesserungsvorschläge?

Danke für jede Hilfe!!!

Computer, Website, SQL, HTML, Webseite, Programmieren, Datenbank, MySQL, PHP

Meistgelesene Fragen zum Thema SQL