[PHP-MySQL] Query/Result ok via commandline, niet via php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sorki
  • Registratie: September 2002
  • Laatst online: 12-09 12:55

Sorki

world wide wubbish

Topicstarter
SQL:
1
2
3
4
5
SELECT distinct T1.* 
FROM tbladvisory as T1, tblossoft as T2 
WHERE T1.advisory_id = T2.advisory_id 
AND ((T2.os_id IN ('153','148')) or (T2.software_id IN ('5','6','7'))) 
ORDER BY T1.advisory_id desc 


Bovenstaande query werkt zonder problemen als ik hem lanceer via SQLyog of command line werkt hij zoals verwacht.

Nu gebruik ik dezelfde query in een php script en krijg de error Cannot execute query:Column: 'advisory_id' in field list is ambiguous terug ... Beetje raar lijkt me want ik specifieer toch dat alles van T1 moet komen?

ik heb al geprobeerd in de select specifieker te zijn:

SQL:
1
select distinct T1.advisory_id, T1.release_date


maar dat doet het em ook niet...

Iemand enig idee waar het mis loopt?

Sorki#2242


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 23:07
Ik heb je tabellen even nagebouwd, met de kolommen die je in je query vrijgeeft. Ik heb er nu slechts 2 records per tabel in zitten, maar tot nu toe geeft je eerste query geen fouten.

Is het niet slimmer om met joins te werken, wellicht kan dat je wat ellende besparen.

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
De ',' operator is ook een join. ;) Maar het is inderdaad handiger om expliciet de te gebruiken join voluit te schrijven, en een ON clause te gebruiken ipv. een WHERE clause voor de join conditie.

Overigens heb ik zo mijn vraagtekens bij het gebruik van distinct in deze query. Ik heb het vermoeden dat ts elke id maar 1x wil zien in de resultset, maar dan moet je niet distinct op deze manier gebruiken.

Heb je het overigens over dezelfde mysql server? Lokaal versie 4 draaien en online mysql 5 kan ook dit soort gedrag verklaren. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • Sorki
  • Registratie: September 2002
  • Laatst online: 12-09 12:55

Sorki

world wide wubbish

Topicstarter
Ok, ik gebruik nu deze query:

SQL:
1
2
3
4
5
SELECT distinct T1.*
FROM tbladvisory as T1 
LEFT JOIN tblossoft as T2 
ON T1.advisory_id = T2.advisory_id 
WHERE ((T2.os_id IN ('153','148')) or (T2.software_id IN ('5','6','7')))


Dit geeft hetzelfde resultaat, jammer genoeg exact hetzelfde resultaat 8)7
De query werkt via commandline / sqlyog, maar via php de foutmeling: Cannot execute query:Column: 'advisory_id' in field list is ambiguous

@voutloos:
* Servers: alles wordt uitgevoerd op dezelfde server/database.
* distinct; ik wil idd elke id maar 1x zien, maar wat is er dan verkeerd aan distinct gebruiken?

Sorki#2242


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Ik vermoed dat het een bugje is in het deel dat de resultset verwerkt. Schrijf je kolomnamen eerst gewoon eens helemaal uit (sowieso is het erg lelijk om * te gebruiken in productie code). Als het dan niet werkt zou je nog kunnen overwegen om ' T1.advisory_id as ad_id' oid te doen om te zien of het dan beter werkt.

@hieronder: Dan nu nog ff het hernoemen van je kolomnamen proberen ;)

[ Voor 10% gewijzigd door Janoz op 11-06-2007 14:55 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Sorki
  • Registratie: September 2002
  • Laatst online: 12-09 12:55

Sorki

world wide wubbish

Topicstarter
@Janoz; wat een toeval :) voluitschrijven had ik net geprobeerd, maar helaas ...

Sorki#2242


Acties:
  • 0 Henk 'm!

Verwijderd

Als je deze error krijgt heb je waarschijnlijk twee maal dezelfde veldnaam in dit geval "advisory_id" probeer eens een GROUP BY clausule te gebruiken om te gebruiken.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op maandag 11 juni 2007 @ 15:08:
Als je deze error krijgt heb je waarschijnlijk twee maal dezelfde veldnaam in dit geval "advisory_id"
Denk je?
code:
1
ON T1.advisory_id = T2.advisory_id

;)
probeer eens een GROUP BY clausule te gebruiken om te gebruiken.
geen idee hoe dat de "'advisory_id' in field list is ambiguous" zou moeten voorkomen. En aangezien er geen aggragated field in de query zit lijkt me een group by op het moment helemaal niet nuttig.

@ts: weet je 100% zeker dat de query hetzelfde is in je PHP als erbuiten? Als je je query in PHP samenstelt is het misschien verstandig om de uiteindelijke query even af te laten drukken (als je dat al niet hebt gedaan)

[ Voor 27% gewijzigd door Creepy op 11-06-2007 15:12 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 11 juni 2007 @ 15:08:
Als je deze error krijgt heb je waarschijnlijk twee maal dezelfde veldnaam in dit geval "advisory_id"
Ik denk dat dat wel duidelijk was. Maar waar in die query zie jij precies een advisory_id staan waar niet expliciet is aangegeven uit welke tabel deze moet komen?

Acties:
  • 0 Henk 'm!

Verwijderd

Zit met mijn hoofd ergens anders, mijn excuses slecht gelezen.

Heb je al gekeken met behulp van een var_dump of php niet toevalig je string veranderd voor je hem verstuurd?

Acties:
  • 0 Henk 'm!

  • Sorki
  • Registratie: September 2002
  • Laatst online: 12-09 12:55

Sorki

world wide wubbish

Topicstarter
@Creepy & j.ostie: ik bouw de sql op in php & deze wordt gedumpt naar het scherm als er een fout voorkomt. Copy paste naar commandline & slqyog -> werkt wel.

Momenteel werkt het met een workaround: De veldnaam advisory_id in tblossoft veranderd in de db.
SQL:
1
ON T1.advisory_id = T2.ref_advisory_id


Zo kan ik even verder voor vandaag, maar het intrigeerd me wel waarom dit niet werk :) dat wordt googlen deze avond ^^

Sorki#2242


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20:32
Sorki, welke versie MySQL draai je, 5.0 of hoger toevallig?

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

Verwijderd

Post de query ff, zoals je hem had (voordat je de veldnaam advisory_id wijzigde)
Is idd wel interessant wat er fout gaat.

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 20:09

Dido

heforshe

Die staat hierboven al, toch?
Sorki schreef op maandag 11 juni 2007 @ 13:54:
* distinct; ik wil idd elke id maar 1x zien, maar wat is er dan verkeerd aan distinct gebruiken?
Distinct werkt op het hele record, dus als je dubbele ID's hebt maar de rest van de velden zijn anders, krijg je ze nog steeds "dubbel" - je krijgt wel elk uniek record maar 1 keer.

[ Voor 87% gewijzigd door Dido op 11-06-2007 16:00 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Sorki
  • Registratie: September 2002
  • Laatst online: 12-09 12:55

Sorki

world wide wubbish

Topicstarter
@Morax:
- mysql Ver 12.22 Distrib 4.0.20, for pc-linux (i686)
- php: PHP 4.3.9 (cgi) (built: May 4 2007 11:04:14)

Beide versies mochten voor mij wat recenter maar k'ben niet de beheerder van de machines...

@ dukefan: de query kan je hierboven vinden :)

Sorki#2242

Pagina: 1