Vinzenz Mai: mysql befehl gesucht

Beitrag lesen

Hallo,

Ich habe mich etwas in sql eingearbeitet und habe dann gedacht, dass folgender Befehl funktionieren sollte:

SELECT Titel,Untertitel,Id FROM media ORDER BY ( (Titel LIKE '%Suchbegriff1%') + (Titel LIKE '%Suchbegriff2%') ),Titel,Untertitel,Id

Warum klappt das mit dem "+"-Operator nicht?

was verstehst Du unter "klappt nicht"?

Folgender Befehl funktioniert (für mich verwirrenderweise)

SELECT Titel,Untertitel,Id FROM media ORDER BY (Titel LIKE '%Suchbegriff1%'),Titel,Untertitel,Id

was verstehst Du unter "funktioniert"

Hat es etwas mit dem Ablauf der Ausführung des Befehls zu tun?
Gibt es eine Variante, wie man Befehl 1 zum funktionieren bringen kann? Alternative?

besonders performant dürfte die Abfrage nicht sein, allein schon wegen des zweifachen

%suchbegriff%,

wobei Dir kein Index helfen kann.

Ich kann Dein Problem jedoch nicht nachvollziehen. Ich erhalte die Ergebnisse, von denen ich erwarte, dass Du sie erwartest.

Beispiel:

Ausgangstabelle:

mysql> SELECT plz FROM tabelle;
+-------+
| plz   |
+-------+
| 12345 |
| 09876 |
| 12222 |
| 44444 |
| 44000 |
+-------+
5 rows in set (0.01 sec)

Nun mit ein paar berechneten Spalten:
a) mit 4: enthält die Spalte plz (mindestens) eine 4
b) mit 0: enthält die Spalte plz (mindestens) eine 0
c) mit 4oder0: Wertung: für jeden mindestens einmal gefundenen Suchtext gibt es einen Wertungspunkt.

SELECT  
    plz,  
    (plz LIKE '%4%') mit4,  
    (plz LIKE '%0%') mit0,  
    ((plz LIKE '%4%') + (plz LIKE '%0%')) mit4oder0  
FROM  
    tabelle  

| plz   | mit4 | mit0 | mit4oder0 |
+-------+------+------+-----------+
| 12345 |    1 |    0 |         1 |
| 09876 |    0 |    1 |         1 |
| 12222 |    0 |    0 |         0 |
| 44444 |    1 |    0 |         1 |
| 44000 |    1 |    1 |         2 |

Und jetzt nach der Wertungsspalte sortiert.

SELECT  
    plz,  
    (plz LIKE '%4%') mit4,  
    (plz LIKE '%0%') mit0,  
    ((plz LIKE '%4%') + (plz LIKE '%0%')) mit4oder0  
FROM  
    tabelle  
ORDER BY  
    ((plz LIKE '%4%') + (plz LIKE '%0%'));  

| plz   | mit4 | mit0 | mit4oder0 |
+-------+------+------+-----------+
| 12222 |    0 |    0 |         0 |
| 12345 |    1 |    0 |         1 |
| 09876 |    0 |    1 |         1 |
| 44444 |    1 |    0 |         1 |
| 44000 |    1 |    1 |         2 |

5 rows in set (0.00 sec)

Und ja:

mysql> SELECT TRUE + FALSE;
+--------------+
| TRUE + FALSE |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)

mysql> SELECT TRUE + TRUE + TRUE;
+--------------------+
| TRUE + TRUE + TRUE |
+--------------------+
|                  3 |
+--------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUE + TRUE;
+-------------+
| TRUE + TRUE |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)

MySQL nutzt TINYINT für BOOLEAN.

Freundliche Grüße

Vinzenz