Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MySQL Ersatz für EXCEPT

Frage Entwicklung Datenbanken

Mitglied: ChrisFah

ChrisFah (Level 1) - Jetzt verbinden

09.07.2014, aktualisiert 13.07.2014, 1014 Aufrufe, 2 Kommentare

hallo leute,
wieder einmal wende ich mich hilfesuchend an Euch:

ich habe zwei Mysql queries , deren Ergebnis sich ausschlissen soll:
$query1 = 'SELECT kw, path FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY count DESC, kw ASC LIMIT 200';

$query2 = 'SELECT id, kw, path FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY date_added DESC LIMIT 200';

Beide Abfragen suchen in der gleichen tabelle, die erste nach den 200 meisten 'counts' , die zweite nach den 200 neuesten Einträgen.
Als Ergebnis suche ich jene 200 der ersten Abfrage, die NICHT in der zweiten Abfrage gelistet sind.

MIt (query1) EXCEPT (query2) geht es unter Mysql nicht.

Auch folgendes klappt nicht, da Mysql in Subqueries kein LIMIT unterstützt.
$query = 'SELECT id, kw, path FROM kw
WHERE id NOT IN
(SELECT id FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY date_added DESC LIMIT 200)
AND lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY count DESC, kw ASC LIMIT 200 ';


Hat da wer einen Tip für mich?

Lg, Chris
Mitglied: ChrisFah
09.07.2014 um 22:50 Uhr
Ich denke, ich hab eine Lösung gefunden:

$query = 'SELECT id, kw, path FROM kw a
WHERE NOT EXISTS
(SELECT id FROM kw b WHERE plain_kw REGEXP "^[0-9]" AND lang_id = '.intval($l['id']).' AND active = 1 AND use_as = 0 AND a.id = b.id ORDER BY date_added DESC LIMIT 200)
AND plain_kw REGEXP "^[0-9]" AND lang_id = '.intval($l['id']).' AND active = 1 AND use_as = 0 ORDER BY count DESC, kw ASC LIMIT 200 ';

So scheint es auf den ersten Blick zu klappen. Vielleicht kann noch mal jemand ein Auge draufwerfen... Danke!

Lg, Chris
Bitte warten ..
Mitglied: colinardo
LÖSUNG 09.07.2014, aktualisiert 13.07.2014
Hi,
probier mal das hier:
01.
SELECT a.id, a.kw, a.path  
02.
FROM kw as a 
03.
LEFT JOIN ( 
04.
  SELECT id  
05.
  FROM kw  
06.
  WHERE lang_id = '.intval($l['id']).'  
07.
  AND plain_kw REGEXP "^[0-9]" 
08.
  AND active = 1  
09.
  AND use_as = 0  
10.
  ORDER BY date_added DESC LIMIT 200 
11.
) AS b USING (id) 
12.
WHERE lang_id = '.intval($l['id']).'  
13.
AND plain_kw REGEXP "^[0-9]"  
14.
AND active = 1 
15.
AND use_as = 0 
16.
AND b.id IS NULL 
17.
ORDER BY count DESC, kw ASC LIMIT 200 ';
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Verschlüsselung & Zertifikate
Zugriff auf mySQL-DB mit ODBC und SSL (1)

Frage von Titan24 zum Thema Verschlüsselung & Zertifikate ...

Cluster
Brauche hilfe beim einrichten von Galera Cluster for MySQL

Frage von akadawa zum Thema Cluster ...

Datenbanken
MySQL - Mehrere Instanzen

Frage von ForgottenRealm zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Router & Routing
Tipps für Router (ca. 100 clients, VPN) (18)

Frage von oel-auge zum Thema Router & Routing ...

TK-Netze & Geräte
gelöst Convert von TAPI auf CAPI gesucht (13)

Frage von StefanKittel zum Thema TK-Netze & Geräte ...