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, 999 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

Webbrowser
gelöst Daten in entfernte Mysql DB schreiben (3)

Frage von nullacht15 zum Thema Webbrowser ...

Datenbanken
MySQL: Zwei Spalten in einer View zählen (11)

Frage von Memo66 zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...