Vreemde fout bij query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SeaCrime

SeaCrime

20/06/2009 18:14:00
Quote Anchor link
Beste PHP'ers,

In mijn osCommerce webshop krijg ik de volgende fout nadat ik een productcategorie wil bekijken:

1054 - Unknown column 'p.products_id' in 'on clause'

select count(*) as total from products_description pd, products p left join manufacturers m on p.manufacturers_id = m.manufacturers_id, products_to_categories p2c left join specials s on p.products_id = s.products_id where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '2' and p2c.categories_id = '274'

Waar kan dit aan liggen? Ik begrijp de fout namelijk ook niet...

Bij voorbaat dank voor jullie hulp!!
 
PHP hulp

PHP hulp

23/11/2024 19:38:18
 
B a s
Beheerder

B a s

20/06/2009 18:17:00
Quote Anchor link
Gebruik je misschien een nieuwere versie van OsCommerce en een oudere versie qua db structuur?
 
Gerard M

Gerard M

20/06/2009 18:23:00
Quote Anchor link
Het is een mySQL bug (of zit er wat logisch achter?).

Je kan het oplossen door je FROM tables om te draaien, dus "products p, products_description pd" IPV "products_description pd, products p".

En als dat niet werkt kan je proberen om alleen de LEFT JOIN syntax the gebruiken, en niet gaan 'joinen' met de WHERE clausule.
 
Noppes

Noppes

20/06/2009 18:25:00
Quote Anchor link
Wel je maakt er een alle gaartje van...
Schrijf altijd je queries overzichtelijk!!!!!!!!!!!!!!

De foutmelding komt omdat de manier waarop je de from clause hebt samengesteld niet klopt.

Mischien dat je het met een overzichtelijke query het wel ziet wat er mis aan is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
select     count(*) as total
from    products_description pd
,        products p
        left join manufacturers m
            on p.manufacturers_id = m.manufacturers_id
,        products_to_categories p2c
        left join specials s
            on p.products_id = s.products_id
where    p.products_status = '1'
and        p.products_id = p2c.products_id
and        pd.products_id = p2c.products_id
and        pd.language_id = '2'
and        p2c.categories_id = '274'


oh en dan nog 1 gouden regel:
alle joins vastleggen in de from of alle in de where
dus niet in beide
Gewijzigd op 01/01/1970 01:00:00 door Noppes
 
SeaCrime

SeaCrime

20/06/2009 20:03:00
Quote Anchor link
Bedankt voor jullie hulp allereerst, echter werkt het nog niet.

Bas:
Ik gebruik de database versie 3.2.0 van phpMyAdmin en een
redelijk oud osCommerce script (heb de webshop namelijk
gekocht, deze maakte ook nog gebruik van register_globals).

Gerjo:
Dit heb ik gedaan maar blijkt niet te werken...

Noppes:
Dit was de foutmelding die ik plakte, het script ziet er anders
uit, wel iets geordender. Echter kan ik niet zien wat er fout
is aangezien ik niet met left join etcetera werk omdat ik hier
nog onvoldoende kennis van heb, zou je het me uit kunnen
leggen waar de fout zit?

Bij voorbaat dank!!
 
Noppes

Noppes

20/06/2009 20:27:00
Quote Anchor link
"zou je het me uit kunnen
leggen waar de fout zit?"

wel nu dat heb ik al gedaan in mijn vorige post
Quote:
De foutmelding komt omdat de manier waarop je de from clause hebt samengesteld niet klopt.


dus je zult de query zodanig moeten herschrijven dat ie doet wat jij wilt dat ie moet doen
Gewijzigd op 01/01/1970 01:00:00 door Noppes
 
SeaCrime

SeaCrime

20/06/2009 20:29:00
Quote Anchor link
Noppes, ik weet dat er een fout in zit maar kan 'm zelf niet herkennen omdat ik niet zoveel verstand heb van zulke geavanceerde database queries. Ik zou het erg waarderen als je me uit kunt leggen hoe ik het moet verbeteren!
 
Noppes

Noppes

20/06/2009 22:04:00
Quote Anchor link
Dat valt niet uit te leggen aan iemand die op SQL level 0 zit.

Gaat eerst de basis eens bekijken:
http://www.w3schools.com/SQL/sql_func_count.asp
http://www.w3schools.com/SQL/sql_join.asp
 
Afra ca

Afra ca

21/06/2009 03:28:00
Quote Anchor link
En integers NIET tussen quotes zoals Noppes dus wel doet.....
 
Noppes

Noppes

21/06/2009 11:41:00
Quote Anchor link
@Afra, dus jij neemt met je gezonde verstand aan dat
- language_id
- categories_id
- products_status
een numeriek veldtype hebben

Je kan niet zo maar schrijven `integers NIET tussen quotes`, wat als de TS lekker varchar als type gedefineerd heeft staan!
 
Bart V B

Bart V B

21/06/2009 11:58:00
Quote Anchor link
@afra,
"En integers NIET tussen quotes zoals Noppes dus wel doet....."

SQL != php.

Dus Intregers WEL binnen quotes ;)
Je help de hele query om zeep als je het niet doet.
 
Noppes

Noppes

21/06/2009 12:25:00
Quote Anchor link
@Bart
Dat SQL ongelijk is aan PHP is een ieder wel duidelijk, echter wat Afra probeert duidelijk te maken is dat je waarden welke je gaat toekennen aan een tabelveld van het type numeriek je deze in SQL niet qoute. En ja daar heeft hij/zij/het dan gelijk in!
 
B a s
Beheerder

B a s

21/06/2009 12:32:00
Quote Anchor link
Idd, die horen buiten quotes.

SeaCrime, aangezien dit niet de enige query zal zijn in je verouderde OsCommerce, waarom ga je niet de nieuwste versie in gebruik nemen?
 
Afra ca

Afra ca

21/06/2009 13:30:00
Quote Anchor link
Noppes schreef op 21.06.2009 11:41:
@Afra, dus jij neemt met je gezonde verstand aan dat
- language_id
- categories_id
- products_status
een numeriek veldtype hebben

Je kan niet zo maar schrijven `integers NIET tussen quotes`, wat als de TS lekker varchar als type gedefineerd heeft staan!


Dan lijkt het mij aan ons de taak om TS erop te wijzen dat dat misschien niet zo'n geweldig plan is. Ik zie namelijk geen voordelen van categories_id als varchar op te slaan. Maar je hebt gelijk, indien dit wel de situatie is, dan moet het wel in quotes.

Noppes schreef op 21.06.2009 12:25:
@Bart
Dat SQL ongelijk is aan PHP is een ieder wel duidelijk, echter wat Afra probeert duidelijk te maken is dat je waarden welke je gaat toekennen aan een tabelveld van het type numeriek je deze in SQL niet qoute. En ja daar heeft hij/zij/het dan gelijk in!


Jup. En laten we het maar op "hij" houden.
 
SeaCrime

SeaCrime

21/06/2009 13:47:00
Quote Anchor link
Bedankt voor jullie hulp tot nu toe, ik heb me wat verdiept in die JOIN functie maar ik kan echt niet zien wat er fout is. De velden zijn inderdaad gewoon int() en geen varchar, maar laat het nogmaals duidelijk zijn: ik heb dit script niet geschreven, heb deze webshop gekocht en ben 'm nu aan het uploaden op mijn eigen host, in principe werkt alles behalve die query en dat is natuurlijk onhandig.

Degene die mij kan laten zien waar de fout zit en hoe ik het kan verbeteren zal ik met een gratis domein naar keuze belonen. Bij voorbaat dank!
 
Noppes

Noppes

22/06/2009 17:56:00
Quote Anchor link
de fout zit hier: on p.products_id = s.products_id

maar dat wist je waarschijnlijk al ;-)
 
SeaCrime

SeaCrime

22/06/2009 19:41:00
Quote Anchor link
En hoe kan ik m verbeteren Noppes, dat is mijn laatste vraag? Als je even de juiste query laat zien zal ik je niet meer lastigvallen. Dan krijg je ook je verdiende gratis domein naar keuze (wat ik bij TransIP op jouw naam registreer, waarvoor ik betaal en daarna push (gratis) naar jouw account).
 
Noppes

Noppes

22/06/2009 19:50:00
Quote Anchor link
Ik zit niet te wachten op een `gratis` domein, heb er al meer dan genoeg

Het ergste vind ik wel dat je je er niet in wilt verdiepen.... dan wel de suggesties niet opvolgt welke gegeven worden......

En al zal die query executeerbaar worden dan nog heb ik m'n twijfels over de juiste uitkomst...
 
SeaCrime

SeaCrime

22/06/2009 20:01:00
Quote Anchor link
Noppes, nogmaals: ik respecteer je hulp, daar draait het niet om en ik wil ook best leren, maar zit momenteel om een bepaalde reden wat in tijdnood en anders gaat het te lang duren wat een hoop kosten met zich meebrengt.

Begrijp me niet verkeerd: ik respecteer het dat je me helpt en daar wilde ik iets tegenover zetten..
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.