Hei,
En saa nyt mitenkään mieleen miten sain haettua yhdellä kyselyllä esim. toimittajat pilkuilla eroteltuna yhteen "kenttään" kun ne ovat eri taulussa seuraavan laisesti:
RFQs:
ID, DateAdded, CustomerRef,....
RFQsSuppliers:
ID, SupplierID, RFQID
Suppliers:
ID, Name, ...
Eli haluaisin alla olevaan kyselyyn lisättävän Suppliers.Name:in niin että ne olisi pilkuilla eroteltuna, (Supplier1, Supplier2...)
$result = mysql_query("SELECT RFQs.DateAdded as DateAdded, Customers.Name as customer, RFQs.ID as RFQID, Ships.Name as ship, RFQs.CustomerRef as CustomerRef, Contacts.FirstName as contactF, Contacts.LastName as contactL, Contacts.Email as contactE, Users.tunnus as handler, RFQStatus.Name as status, RFQs.Description as RFQDescription, RFQs.LastEdited as LastEdit FROM RFQs LEFT JOIN Ships ON RFQs.ShipID=Ships.ID LEFT JOIN Contacts ON RFQs.ContactID=Contacts.ID LEFT JOIN Customers ON RFQs.CustomerID=Customers.idCustomers LEFT JOIN Users ON RFQs.PriJobHandler=Users.id LEFT JOIN RFQStatus ON RFQs.StatusID=RFQStatus.ID WHERE RFQs.LastEdited > '$lastedited' ORDER BY RFQs.LastEdited ASC ") or die(mysql_error());
Jotenkin se tehtiin CONCAT ja JOIN functioilla, mutta netin esimerkkejä (muutamaa sinnepäin olevaa jota löysin) hyväksikäyttäenkään en saa tuota toimimaan oikein.
Kaikki apu otetaan kiitollisena vastaan.
GROUP_CONCAT(Suppliers.Name)
Mihin väliin tuo tulisi kyseiseen kyselyyn laittaa että menee oikein?
SELECT ja FROM väliin.
OK, Mutta miten saan Joinattua nuo RFQsSuppliers taulussa olevat toimittajat ja niihin oikeat nimet(Suppliers.Name) Suppliers taulusta?
SELECT GROUP_CONCAT(Suppliers.Name) AS Names FROM RFQsSuppliers LEFT JOIN Suppliers ON RFQsSuppliers.SupplierID = Suppliers.ID
Muutin Queryn nyt tälläiseksi:
$result = mysql_query("SELECT RFQs.DateAdded as DateAdded, Customers.Name as customer, RFQs.ID as RFQID, Ships.Name as ship, RFQs.CustomerRef as CustomerRef, Contacts.FirstName as contactF, Contacts.LastName as contactL, Contacts.Email as contactE, Users.tunnus as handler, RFQStatus.Name as status, RFQs.Description as RFQDescription, RFQs.LastEdited as LastEdit, GROUP_CONCAT(Suppliers.Name) as Suppliers FROM RFQs LEFT JOIN Ships ON RFQs.ShipID=Ships.ID LEFT JOIN Contacts ON RFQs.ContactID=Contacts.ID LEFT JOIN Customers ON RFQs.CustomerID=Customers.idCustomers LEFT JOIN Users ON RFQs.PriJobHandler=Users.id LEFT JOIN RFQsSuppliers ON RFQs.ID=RFQsSuppliers.SupplierID LEFT JOIN Suppliers ON RFQsSuppliers.SupplierID=Suppliers.ID LEFT JOIN RFQStatus ON RFQs.StatusID=RFQStatus.ID WHERE RFQs.LastEdited > '$lastedited' ORDER BY RFQs.LastEdited ASC ") or die(mysql_error());
mutta en ymmärrä yhtä asiaa.
minulla on if (mysql_num_rows($result) == 0) { ... niin sitten käsitellään data eteenpäin jne..
Mutta tällä hetkellä kusely palauttaa aina rivin, vaikka kaikki arvot ovat null joka sarakkeella, eikä rivejä pitäisi edes palauta koska millekkään riville ei ole tehty päivityksiä eikä siis timestamp ole isompi kuin mikä php tiedostolle on alussa annettu. Ennen tämä on toiminut hyvin mutta kun lisäsin tämän GROUP_CONCAT ja LEFT JOIN Suppliers ja RFQsSuppliers...
Missä voisi olla vika??
Koita korvata WHERE -> HAVING
No, nyt ei tule kun ei ole päivityksiä, mutta eipä tule päivityksien jälkeenkään :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.