Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MYSQL CONCAT & JOIN ongelma

Sivun loppuun

stageradio [17.02.2012 12:46:36]

#

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.

samip [17.02.2012 13:05:26]

#

GROUP_CONCAT(Suppliers.Name)

stageradio [17.02.2012 13:15:33]

#

Mihin väliin tuo tulisi kyseiseen kyselyyn laittaa että menee oikein?

samip [17.02.2012 13:25:23]

#

SELECT ja FROM väliin.

stageradio [17.02.2012 13:47:12]

#

OK, Mutta miten saan Joinattua nuo RFQsSuppliers taulussa olevat toimittajat ja niihin oikeat nimet(Suppliers.Name) Suppliers taulusta?

samip [17.02.2012 14:10:51]

#

SELECT GROUP_CONCAT(Suppliers.Name) AS Names
FROM RFQsSuppliers
LEFT JOIN Suppliers
    ON RFQsSuppliers.SupplierID = Suppliers.ID

stageradio [17.02.2012 14:42:19]

#

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??

samip [17.02.2012 14:59:32]

#

Koita korvata WHERE -> HAVING

stageradio [17.02.2012 15:18:28]

#

No, nyt ei tule kun ei ole päivityksiä, mutta eipä tule päivityksien jälkeenkään :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta