php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.03.2008, 18:04  
Neuer Benutzer
 
Registriert seit: 16.03.2008
Beiträge: 12
sugar
Standard Datenbank verknüpfen oder verbinden?

Ich habe folgende MySQL Abfrage:

Code:
 $query = "SELECT
      DISTINCT COUNT(*) as count, address_book.entry_country_id,  countries.countries_name
FROM
    address_book
JOIN
      customers ON address_book.customers_id = address_book.customers_id
JOIN
      countries ON address_book.entry_country_id = countries.countries_id
WHERE
      customers.customers_default_address_id = address_book.address_book_id
      AND countries.countries_name='Spain'
      
GROUP BY
      entry_country_id
ORDER BY
      countries.countries_name";  
  $result = mysql_query($query) or die("Temporary query failure: " . mysql_error());

  echo "    <table>\n";
  echo "      <tr class=\"header\"><th>country</th><th>customers</th></tr>\n";
  while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    echo "      <tr>\n";
    echo "        <td><a href=\"cities.php?country_id=$row[1]\">$row[2]</a></td>\n";
    echo "        <td align=\"center\">$row[0]</td>\n";
    echo "      </tr>\n";
  }
  echo "    </table>\n";

  mysql_free_result($result);
?>
Jetzt würde ich diese aber gern noch um eine weitere Abfrage erweitern bzw. ergänzen:

Code:
(SELECT products_model
          FROM orders_products
         WHERE products_model = '0003')
Wie kann ich diese Abfrage noch hinzufügen? "JOIN" geht nicht weil es keine Verbindung gibt in den Tabellen. Kann man ein Ergebnis speichern oder hat jemand eine Idee?

Danke!
sugar ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.03.2008, 06:09  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hi, nach welchem Kriterium soll denn gejoint werden?

Wenn es nur ein Eintrag mit diesem products_model ist, join eben nach dieser Bedingung, auch wenn es in meinen Augen wenig Sinn macht!

SELECT m.*, j.products_model
FROM .. AS m
LEFT JOIN products_model AS j
ON products_model = '0003'

Wenn du dadurch aber mehr als einen Treffer bekommst, zerhauts dir das Ergebnis. Selektier dieses products_model doch einfach einzeln und greif normal per PHP darauf zu?!

PS: Herzlich willkommen bei uns im Forum
Zergling-new ist offline   Mit Zitat antworten
Alt 17.03.2008, 11:49  
Neuer Benutzer
 
Registriert seit: 16.03.2008
Beiträge: 12
sugar
Standard

Hallo, danke für deine Antwort!
Ich glaube ich verstehe es leider nicht. Ich bin einfach noch ein MySQL Anfänger und bekomme nur einfach Abfragen hin. Diese habe ich im Internet gefunden, es geht um xtCommerce, dort im Forum hilft einem natürlich niemand (wenn man nicht dafür bezahlt). Aber zurück zum Thema: ich habe erst herausgefunden was man mit JOIN überhaupt machen kann. Ich kann es für die weitere Abfrage nicht verwenden weil es keinen Bezug hat zur Tabelle "address_book", soweit habe ich es verstanden. Nur wie geht es weiter wenn ich eben noch differenzieren muss nach Produktnummer? Mir fehlen absolut die Ansatzpunkte, muss ich ein weitere Abfrage machen und diese verknüpfen? Muss ich die Abfrage verschachteln? Erweitern? Und wie mache ich das überhaupt? Irgendwie stehe ich total auf dem Schlauch und komme überhaupt nicht weiter. Es ist wirklich viel verlangt aber ich bin wirklich für jede Hilfe dankbar!
sugar ist offline   Mit Zitat antworten
Alt 17.03.2008, 12:52  
Neuer Benutzer
 
Registriert seit: 16.03.2008
Beiträge: 12
sugar
Standard

Hab es jetzt doch noch mal ganz umgeschrieben.

PHP-Code:
  $query "SELECT 
      DISTINCT COUNT(*) as count, orders.orders_id, orders.customers_country, countries.countries_name, orders_products.products_model
      
  FROM orders

JOIN
      orders_products ON orders.orders_id = orders_products.orders_id
JOIN
      countries ON orders.customers_country = countries.countries_name
WHERE 
      countries.countries_name='Spain'
      AND orders_products.products_model ='0003'
      
GROUP BY 
      countries.countries_name
ORDER BY 
      countries.countries_name"
;
  
$result mysql_query($query) or die("Temporary query failure: " mysql_error());
 
  echo 
"    <table>\n";
  echo 
"      <tr class=\"header\"><th>land</th><th>bestellungen</th></tr>\n";
  while (
$row mysql_fetch_array($resultMYSQL_NUM)) {
    echo 
"      <tr>\n";
    echo 
"        <td>$row[2]</td>\n";
    echo 
"        <td align=\"center\">$row[0]</td>\n";
    echo 
"      </tr>\n";
  }
  echo 
"    </table>\n";
 
  
mysql_free_result($result); 
Sind noch Fehler drin? Es scheint allerdings zu funktionieren!
Jetzt kommt allerdings noch etwas dazu, das Ergebnis müsste ich irgendwie noch addieren können weil nicht nur Länder sondern auch Kontinente gezählt werden sollen!
Kann Abfragen irgendwie addieren?
sugar ist offline   Mit Zitat antworten
Alt 17.03.2008, 14:36  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von sugar
Sind noch Fehler drin? Es scheint allerdings zu funktionieren!
Es scheint. Allerdings nur, weil du nur den Zähler und das Land ausgibst. Die andern Attribute enthalten zufällige Werte, da die DB natürlich nicht wissen kann, welches in Spanien verkaufte Produkt diesem Zähler zugeordnet werden soll. Und wenn du nur die Werte eines Landes ausgibst, kannst du sowohl auf GROUP BY, wie auch auf ORDER BY verzichten. Und die Zählung nach Kontinenten erübrigt sich dann auch.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 17.03.2008, 15:09  
Neuer Benutzer
 
Registriert seit: 16.03.2008
Beiträge: 12
sugar
Standard

Hm schade eigentlich, also bestätigt sich meine Aussage wenigstens das ich keine Ahnung habe. Danke für deine Antwort! Leider habe ich es überhaupt nicht vestanden.. sorry! Ist also alles Mumpitz was angezeigt wird? Wenn ich eine weitere Bestellung ausgeführt hatte, hat sich aber die Zahl verändert bei Bestellungen...
sugar ist offline   Mit Zitat antworten
Alt 17.03.2008, 15:26  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von sugar
Ist also alles Mumpitz was angezeigt wird?
Nein, natürlich nicht. Der Zähler ist richtig, das Land auch. Das einzige was ich sage ist, dass der Rest nicht stimmen würde, aber den schaust du ja auch nicht an. Also würde die folgende Abfrage auch auch genügen:
Code:
SELECT 
	DISTINCT COUNT(*) AS count, 
	c.countries_name, 
FROM 
	orders o
INNER JOIN
	orders_products op ON o.orders_id = op.orders_id
INNER JOIN
	countries c ON o.customers_country = c.countries_name
WHERE
	c.countries_name = 'Spain'
  AND 
	op.products_model = '0003';
Und falls du mehrere Länder abfragen willst, brauchst du natürlich dann die GROUP BY-Klausel wieder.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 17.03.2008, 17:56  
Neuer Benutzer
 
Registriert seit: 16.03.2008
Beiträge: 12
sugar
Standard

Ah jetzt verstehe ich was du meinst! Allerdings bekomme ich bei deiner Schreibweise immer die Fehlermeldung das ein GROUP fehlt? Hast du zufällig eine Idee wie ich mit den Kontinenten denn machen kann?

Danke!
sugar ist offline   Mit Zitat antworten
Alt 17.03.2008, 18:54  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Ja, das er diese Meldung anzeigt, ist klar. Funktionen wie COUNT(), MAX(), MIN(), SUM() etc. geben immer nur ein Ergebnis zurück, bei der Angabe von Spaltennamen können, aber mehrere Ergebnisse geliefert werden, weshalb MySQL noch ein sinnvoll angebrachtes GROUP BY `spaltenname` erfordert, wenn man beides mischt.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 17.03.2008, 20:22  
Neuer Benutzer
 
Registriert seit: 16.03.2008
Beiträge: 12
sugar
Standard

Alles klar! Danke Manko!

Könnte ich für das Zählen der Kontinente (also der Länder) nicht einfach folgende Abfrage verwenden:
PHP-Code:
countries.countries_name='Germany' AND countries.countries_name='Spain' 
Funktioniert natürlich so nicht, ich versteh natürlich wieder nicht wieso..
sugar ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Speichern einer Telefonliste mit PHP in einer Datenbank timo_81 PHP Tipps 2008 30 07.09.2007 17:52
Wann Datenbank öffnen/schließen tayke PHP Tipps 2006 10 24.05.2006 17:29
Verbindung zu einer Datenbank im LAN Datenbanken 11 25.09.2005 12:18
Datenbank connect auf nicht llokalen Server PHP-Fortgeschrittene 5 16.09.2005 08:23
Probleme beim Datenupload zu meiner Datenbank Datenbanken 3 05.09.2005 19:47
Mehrere Anwendungen eine Datenbank... Datenbanken 5 15.08.2005 11:22
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? PHP Tipps 2005-2 0 05.08.2005 19:33
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:32
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:29
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:29
Auslesen aus der Datenbank nixdorf PHP Tipps 2005 7 06.02.2005 21:40
INSERT in die Datenbank PHP Tipps 2004-2 4 13.12.2004 19:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql datenbank verknüpfen, sugar mit anderer datenbank verknüpfen, customers_id address_book entry_country_id, latexanzug, xt commerce auslesen country_id

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.