2016-04-18 15 views
0

Dies funktioniert:PHP-Abfragen nicht funktioniert

SELECT * 
FROM ((((defect 
JOIN project_testcase ON 
defect.Test_Id=project_testcase.Test_Id) 
JOIN testcase ON 
defect.Test_Id=testcase.Test_Id) 
JOIN project_pm ON 
project_testcase.Project_Id=project_pm.Project_Id) 
JOIN employee ON 
employee.Emp_id=project_pm.Emp_id) 

Dies ist jedoch nicht funktioniert:

SELECT * 
FROM ((((defect 
JOIN project_testcase ON 
defect.Test_Id=project_testcase.Test_Id) 
JOIN testcase ON 
defect.Test_Id=testcase.Test_Id) 
JOIN project_pm ON 
project_testcase.Project_Id=project_pm.Project_Id) 
JOIN employee ON 
employee.Emp_id=project_pm.Emp_id) 
WHERE Project_Id LIKE '%$categ%' 

Wie ich verwendet Tabellen JOIN haben und trat Project_Id verwenden. Ist das der Fehler?

+4

Als erstes müssen Sie Ihren Code richtig formatieren/einrücken. Sie könnten das Problem sogar so finden. –

+1

Was hat das mit PHP zu tun? Ist es MySQL oder SQL Server? –

+1

Wird die Fehlermeldung oder das unerwartete Verhalten der zweiten Abfrage klassifiziert? – Shadow

Antwort

0

Project_Id in der where-Klausel nicht eindeutig ist, müssen Sie es definieren, wie Sie getan haben Ihre dh WHERE project_pm.Project_Id like '%$categ%'

0

In der where-Klausel der zweiten Abfrage verknüpft müssen Sie die rdbms genau sagen, welches Feld project_id Sie wollen zu filtern, da mehrere Tabellen das Feld Project_Id enthalten, z project_pm.Project_Id.

0

Beginnend mit dem Entfernen all dieser unnötigen Klammern, Formatierung und Aliase zeigt eine ziemlich einfache Abfrage darunter.

select * --This should really be the columns you actually need instead of all of them 
from defect d 
join project_testcase ptc on d.Test_Id = ptc.Test_Id 
join testcase t on d.Test_Id = t.Test_Id 
join project_pm p on ptc.Project_Id = p.Project_Id 
join employee e on e.Emp_id = p.Emp_id 
where p.Project_Id like '%$categ%' 

Natürlich wirft dies die Frage auf, warum haben Sie Text wie das in einer Spalte namens Project_Id? Das sieht für mich nicht wie eine Projekt-ID aus. Und da Sie einen führenden Platzhalter verwenden, haben Sie eine nonSARGable-Abfrage, so dass Sie die Fähigkeit der Indexsuche für diese Spalte eliminiert haben.

1

Das erste, was ich tun würde, um dies zu beheben, ist, es in einen SQL-Formatierer einzufügen. Dies wird helfen, Syntaxfehler zu finden und könnte Ihnen helfen, einen logischen Fehler zu sehen. Ich würde empfehlen freeformatter.com.

Zweitens können Sie die Klammern loswerden.

The Fix

Sie müssen angeben, welche Tabelle die project_id in der WHERE zu bekommen, weil es in mehreren Tabellen, aber für Klarheit würde ich immer angeben, welche Tabelle es kommt.

select 
    * 
from 
    defect 
join 
    project_testcase   
     on defect.Test_Id=project_testcase.Test_Id  
join 
    testcase  
     on defect.Test_Id=testcase.Test_Id  
join 
    project_pm 
     on project_testcase.Project_Id=project_pm.Project_Id  
join 
    employee 
     on employee.Emp_id=project_pm.Emp_id  
where 
    project_testcase.Project_Id like '%$categ%' 
+0

Wenn meine Antwort geholfen hat, Ihr Problem zu beheben, könnten Sie es als akzeptierte Antwort @AbhinavChanana machen –

Verwandte Themen