Ich hasse SQL =;)

Hallo,

eine SQL-Datenbank dankt mir mit folgendem Fehler:

1054 - Unknown column 'p.manufacturers\_id' in 'on clause'

select distinct p.products\_id, p.products\_fsk18, pd.products\_name, pd.products\_short\_description, p.products\_image, p.products\_price, p.products\_vpe, p.products\_vpe\_status, p.products\_vpe\_value, p.products\_tax\_class\_id, p.products\_date\_added, m.manufacturers\_name from products p, categories c, products\_to\_categories p2c left join manufacturers m on p.manufacturers\_id = m.manufacturers\_id left join products\_description pd on p.products\_id = pd.products\_id and pd.language\_id = '2' where c.categories\_status=1 and p.products\_id = p2c.products\_id and c.categories\_id = p2c.categories\_id and products\_status = '1' and p.products\_date\_added \> '2009.10.25' order by p.products\_date\_added DESC

Ich habe die Abfrage nicht erstellt, soll sie nur in ein Shopsystem einbinden (übrigens läuft die Abfrage auf einem anderen Shop mit dem gleichen Datenbankaufbau). ALLE dort genannten Tabellen und Spalten existieren auch genau in der Schreibweise.

Ersetze ich p.Spaltenname durch produtcs.Spaltenname meckert er übrigens schon bei der ersten Spalte.

Ciao! Bjoern

Hallo Bjoern,

ohne DB-Zugriff (und Info zum DBMS) kann ich nur raten. Aber a) man soll die alte und neue Schreibweise nicht mischen und b) halte ich die left join Formulierung für gewagt. Die on-Bedingung sollte nur die Tabellen verwenden, die gejoint wurden. Außerdem wäre das Problem eher erkennbar, wenn Du das Statement formatiert hättest.

select distinct 
 p.products\_id, 
 p.products\_fsk18, 
 pd.products\_name, 
 pd.products\_short\_description, 
 p.products\_image, 
 p.products\_price, 
 p.products\_vpe, 
 p.products\_vpe\_status, 
 p.products\_vpe\_value, 
 p.products\_tax\_class\_id, 
 p.products\_date\_added, 
 m.manufacturers\_name 
 from products p, 
 categories c, 
 products\_to\_categories p2c left join manufacturers m 
 on p.manufacturers\_id = m.manufacturers\_id 
 left join products\_description pd 
 on p.products\_id = pd.products\_id 
 and pd.language\_id = '2' 
 where c.categories\_status=1 
 and p.products\_id = p2c.products\_id 
 and c.categories\_id = p2c.categories\_id 
 and products\_status = '1' 
 and p.products\_date\_added \> '2009.10.25' 
 order by p.products\_date\_added DESC

MfG Georg V.

P.S.: Gleiches Datemmodell glaube ich Dir gerne, aber auch gleiche DBMS-Version

Re^2: Ich hasse SQL =:wink:
Hallo,

select distinct
p.products_id,
p.products_fsk18,
pd.products_name,
pd.products_short_description,
p.products_image,
p.products_price,
p.products_vpe,
p.products_vpe_status,
p.products_vpe_value,
p.products_tax_class_id,
p.products_date_added,
m.manufacturers_name
from products p,
categories c,
products_to_categories p2c left join manufacturers m
on p.manufacturers_id = m.manufacturers_id
left join
products_description pd
on p.products_id = pd.products_id
and pd.language_id = ‚2‘
where c.categories_status=1
and p.products_id = p2c.products_id
and c.categories_id = p2c.categories_id
and products_status = ‚1‘
and p.products_date_added > ‚2009.10.25‘
order by p.products_date_added DESC

ich hab das Problem jetzt lösen können. In einem anderen Forum fand ich den Hinweis darauf, dass die Reihenfolge wichtig sei, also das ich nicht produtcs mit manufaturers left joinen und dann products abfragen kann (on clause), sondern manufacurers mit products right joinen muss, um products abzufragen. Meine Abfrage sieht jetzt so aus:

SELECT DISTINCT 
 p.products\_id, 
 p.products\_fsk18, 
 pd.products\_name, 
 pd.products\_short\_description, 
 p.products\_image, 
 p.products\_price, 
 p.products\_vpe, 
 p.products\_vpe\_status, 
 p.products\_vpe\_value, 
 p.products\_tax\_class\_id, 
 p.products\_date\_added, 
 m.manufacturers\_name 
 FROM 
 manufacturers AS m 
 RIGHT JOIN products AS p ON (m.manufacturers\_id = p.manufacturers\_id) 
 LEFT JOIN products\_description AS pd ON (p.products\_id = pd.products\_id) AND pd.language\_id = '2' , 
 categories AS c, 
 products\_to\_categories AS p2c 
 WHERE c.categories\_status=1 
 AND p.products\_id = p2c.products\_id 
 AND c.categories\_id = p2c.categories\_id 
 AND products\_status = '1' 
 and p.products\_date\_added \> '2009.10.25'
 ORDER BY p.products\_date\_added DESC";

BTW: die Abgfrage stammt aus der products_new_rss.php für xt:commerce Shops. Und obwohl zwei Shops auf dem gleichen Server mit dem gleichen Datenbankserver und DBMS etc. betrieben werden klappt es bei dem einen Shop und bei dem anderen nicht.

Ciao! Bjoern


http://www.dieakkuprofis.de