SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 02.09.2010, 10:11:30
Mark Knochen Mark Knochen ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 47
Beiträge: 4
Doppelte Abfrage in einem SELECT

Hallo,

ich suche die Möglichkeit, einer Abfrage für eine Abfrage:

Code:
SELECT event.ID
FROM event
LEFT JOIN inst_loc ON (inst_loc.ID = event.id_inst_loc)
LEFT JOIN city ON (city.ID = inst_loc.id_city)
LEFT JOIN province ON (province.ID = city.id_province)
LEFT JOIN country ON (country.ID = city.id_country)
LEFT JOIN event_job ON (event_job.id_event = event.ID)
WHERE (event_job.id_job = '44') AND event.deleted = '0'
GROUP BY event.ID ORDER BY event.event_date DESC
Bringt mir die IDs für relevante Einträge.

Diese IDs möchte ich nun nach country.ID gruppieren und zählen,
möglichst in der gleichen Abfrage.

Also wieviele Events, die obiger Abfrage entsprechen kommen in den verschiedenen
Ländern wie oft vor.

Problem: Ich benötige schon in der ersten Abfrage ein GROUP BY, um doppelte
Einträge auszuschliessen.

Danke für Hinweise


Mark Knochen

Geändert von cortex (02.09.2010 um 10:38:48 Uhr) Grund: code-Tags
Mit Zitat antworten
  #2  
Alt 02.09.2010, 10:26:32
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Doppelte Abfrage in einem SELECT

Ich bin mir nicht sicher, ob ich die Frage richtig verstanden habe.

mögliche Lösung:

Code:
SELECT country.id, event.id, COUNT(*) AS anzahl_events_pro_country
  FROM event
  LEFT JOIN inst_loc
    ON (inst_loc.id = event.id_inst_loc)
  LEFT JOIN city
    ON (city.id = inst_loc.id_city)
  LEFT JOIN province
    ON (province.id = city.id_province)
  LEFT JOIN country
    ON (country.id = city.id_country)
  LEFT JOIN event_job
    ON (event_job.id_event = event.id)
 WHERE (event_job.id_job = '44')
   AND event.deleted = '0'
 GROUP BY country.id, event.id
 ORDER BY event.event_date DESC;
Oder zeige mal, wie die gewünschte Ausgabe aussehen soll.

Grüße
Thomas
Mit Zitat antworten
  #3  
Alt 02.09.2010, 10:39:39
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: Doppelte Abfrage in einem SELECT

@Mark: bitte passende code-Tags nutzen.

cx
Mit Zitat antworten
  #4  
Alt 02.09.2010, 10:49:49
Mark Knochen Mark Knochen ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 47
Beiträge: 4
AW: Doppelte Abfrage in einem SELECT

Mh, so haut es nicht hin:

Die erste Abfrage zieht alle Events aus der DB denen ein oder mehrere Jobs mit der ID 44 zugeordnet ist - daher hier GROUP BY auf die event.ID

Aus dieser Menge will ich dann als Endergebnis haben:

500 Events mit dem Job Musik aus Deutschland
250 Events mit dem Job Musik aus Österreich
150 Events mit dem Job Musik aus der Schweiz

Das ist das Ziel.


Mark
Mit Zitat antworten
  #5  
Alt 02.09.2010, 11:23:20
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Doppelte Abfrage in einem SELECT

Ob die Syntax nun genau stimmt, kann ich leider nicht ausprobieren, da bräuchte ich Deine Tabellenstrukturen und ein paar Testdaten.

Also eventuell so..Pro Land, alle Events zählen
Code:
SELECT country.*, anzahl.events_pro_country

  FROM (SELECT country.id AS country_id, COUNT(*) AS events_pro_country
          FROM event
          LEFT JOIN inst_loc
            ON (inst_loc.id = event.id_inst_loc)
          LEFT JOIN city
            ON (city.id = inst_loc.id_city)
          LEFT JOIN province
            ON (province.id = city.id_province)
          LEFT JOIN country
            ON (country.id = city.id_country)
          LEFT JOIN event_job
            ON (event_job.id_event = event.id)
         WHERE (event_job.id_job = '44')
           AND event.deleted = '0'
         GROUP BY country.id) anzahl
  JOIN country
    ON country.id = anzahl.country_id;
Also falls es nicht stimmt, bitte die notwendigen Tabellenstrukturen plus ein paar Testdaten mitliefern, damit ich es entsprechend ausprobieren kann. Allein aus dem Kopf ist es schon etwas schwierig.

Grüße
Thomas
Mit Zitat antworten
  #6  
Alt 02.09.2010, 11:29:22
Mark Knochen Mark Knochen ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 47
Beiträge: 4
AW: Doppelte Abfrage in einem SELECT

Oh, danke, das sieht super aus - ich checke nur mal die Mengen, ob das mit den Einträgen aus der DB passt - danke schonmal.
Das mit den SubSelects kann ich mir immer so schwer vorstellen - gibt's da evtl. eine Seite, die das "GUT" erklärt - ich hänge da immer wieder.

Danke nochmals

Mark
Mit Zitat antworten
  #7  
Alt 02.09.2010, 11:41:45
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Doppelte Abfrage in einem SELECT

Zitat:
Zitat von Mark Knochen Beitrag anzeigen
Das mit den SubSelects kann ich mir immer so schwer vorstellen - gibt's da evtl. eine Seite, die das "GUT" erklärt - ich hänge da immer wieder.
Formal ist das kein SubSelect, sondern nach "Oracle-sprech" ein Inline View.

Schau Dich mal nach SQL-Büchern mit Schwerpunkt JOIN um. Ansonsten empfiehlt sich noch QWERTZU - spricht die Tastatur die vor Dir liegt. Also einfach mal dransetzen und ausprobieren...

Grüße
Thomas

Geändert von thomas_w (02.09.2010 um 12:00:35 Uhr) Grund: Schreibfehler korrigiert
Mit Zitat antworten
  #8  
Alt 02.09.2010, 16:11:54
Mark Knochen Mark Knochen ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 47
Beiträge: 4
AW: Doppelte Abfrage in einem SELECT

Hallo nochmal,

ganz stimmt es noch nicht - aber fast.

Ich habe es nochmal aufgesplittet:

SELECT *
FROM `event`
LEFT JOIN event_job ON ( event_job.id_event = event.ID )
WHERE event.deleted = '0'
AND event.id_inst_loc != '0'
AND event_job.id_job = '44'
GROUP BY event.ID

Bringt alle Events, die einen Job mit der ID 44 beinhalten und einen Ort haben (inst_loc)
Ergebnis: 749 Events.

Aus diesen nun die Gruppierung nach Land.

Die Abfrage vorhin (sieheb oben) ergibt:

Österreich 108
Schweiz 47
Deutschland 703
Liechtenstein 1
Italia 8
România 12

also deutlich mehr Events, als in diese Konstellation vorhanden sind - ich vermute da doch noch doppelte EventIDs in der Abfrage?


Mark
Mit Zitat antworten
  #9  
Alt 02.09.2010, 19:55:09
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Doppelte Abfrage in einem SELECT

Zitat:
Zitat von Mark Knochen Beitrag anzeigen
also deutlich mehr Events, als in diese Konstellation vorhanden sind - ich vermute da doch noch doppelte EventIDs in der Abfrage?
Gut möglich, dass mit den JOINs irgendwas nicht stimmt. Da habe ich nur Deinen SQL weiter verwendet. Deshalb nochmal mein Hinweis..


Zitat:
Zitat von thomas_w Beitrag anzeigen
Also falls es nicht stimmt, bitte die notwendigen Tabellenstrukturen plus ein paar Testdaten mitliefern, damit ich es entsprechend ausprobieren kann. Allein aus dem Kopf ist es schon etwas schwierig.
Am SQL allein lassen sich die Tabellenstrukuren leider nur erraten.

Grüße
Thomas
Mit Zitat antworten
  #10  
Alt 02.09.2010, 20:30:07
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Doppelte Abfrage in einem SELECT

Also Notlösung wäre noch der DISTINCT im COUNT() möglich, also in etwa so..

Code:
SELECT country.*, anzahl.events_pro_country

  FROM (SELECT country.id AS country_id, COUNT(DISTINCT event.id) AS events_pro_country
          FROM event
          LEFT JOIN inst_loc
            ON (inst_loc.id = event.id_inst_loc)
          LEFT JOIN city
            ON (city.id = inst_loc.id_city)
          LEFT JOIN province
            ON (province.id = city.id_province)
          LEFT JOIN country
            ON (country.id = city.id_country)
          LEFT JOIN event_job
            ON (event_job.id_event = event.id)
         WHERE (event_job.id_job = '44')
           AND event.deleted = '0'
         GROUP BY country.id) anzahl
  JOIN country
    ON country.id = anzahl.country_id;
Vielleicht hilft es einen Schritt weiter, aber eigentlich sollten besser die JOINS im SQL korrigiert werden.

Grüße
Thomas
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ausgabe wird nicht angezeigt Extremefall PHP Grundlagen 9 17.12.2009 08:49:45
select array abfrage problem bluepower2020 PHP Grundlagen 3 14.07.2008 12:28:51
Select "zwischenspeichern" und für neue Abfrage benutzen Skeadr MySQLi/PDO/(MySQL) 3 17.06.2008 11:24:35
SELECT Abfrage nur mit gefüllten Werten Skyman MySQLi/PDO/(MySQL) 0 24.10.2007 23:01:50
select feld mit if abfrage? Silencer PHP für Fortgeschrittene und Experten 3 20.11.2002 09:34:59


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:56:13 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt