Poslao: 01 Jun 2015 23:17
|
offline
- Dr.Cooler
- Građanin
- Pridružio: 18 Jun 2014
- Poruke: 178
|
Napisano: 01 Jun 2015 20:58
Evo mene ponovo sa problemom vezanim za izlistavanje iz 2 MySQL tabele u 1 HTML tabelu.
Ovako imam 2 tabele: Fields i Content, iz tabele Fields gde je FieldName izlistavam Table Head u HTML-u:
<?php
$conn = new mysqli($SERVERNAME, $USERNAME, $PASSWORD, $DBNAME);
if ($conn->connect_error) {
die("Greska: " . $conn->connect_error);
}
$sql = "SELECT FieldName FROM Fields WHERE ForUser = '$User_Check' AND ForCategory = '$CategoryName'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table class='table table-bordered'><thead><tr>";
while($row = $result->fetch_assoc()) {
echo "<th>".$row["FieldName"]."</th>";
}
echo "</tr></thead>";
echo "</table>";
}
else {
echo "<div style='margin-top: 18px;' class='alert alert-danger'><b>$lang[MANAGE_CATEGORY_ALERT]</b></div>";
}
$conn->close();
?>
U HTML table Body izlistavam sadrzaj vezan za FieldName. FieldName uzimam iz prethodnog upita. Sada za svaki FieldName moram da kreiram poseban SQL upit i izlistam izlaz u <tbody><tr><td>Sadrzaj</td></tr></tbody>. Sada je problem kako da napravim SQL upit za svaki FieldName i izlistam u gore pomenutu HTML tabelu.
Pozdrav i hvala unapred!
Dopuna: 01 Jun 2015 23:17
Nasao sam nesto da je resenje za moj problem SQL JOIN, ali vec 3 sata nikako ne mogu da napravim neku kombinaciju sa WHERE ForUser = '$User_Check' AND ForCategory = '$CategoryName' AND ForField = 'ImePolja' jer mi ForField sluzi samo za drugu tabelu, isto ne znam kako da dobijem ForField vrednost. Ima li neko nekakvo resenje. Pozdrav i hvala unapred!
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 01 Jun 2015 23:35
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
U FROM klauzuli navedi spoj te dve tabele, a u SELECT klauzuli dopiši kolone iz druge tabele čije vrednosti su ti potrebne. Nešto ovako:
SELECT FieldName, <kolone_iz_druge_tabele>
FROM Fields INNER JOIN Content ON Content.ForField = Fields.FieldName
WHERE ForUser = '$User_Check' AND ForCategory = '$CategoryName';
|
|
|
|
Poslao: 02 Jun 2015 13:08
|
offline
- Dr.Cooler
- Građanin
- Pridružio: 18 Jun 2014
- Poruke: 178
|
Ne dobijam nikako ono sto trazim, sa tvojim kodom izbacuje error. Na slici se vide i upit i error:
Podatke hvatam sa mysqli_fetch_assoc()
|
|
|
|
Poslao: 02 Jun 2015 16:33
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Probaj da ispred problematične kolone dodaš ime tabele kojoj pripada.
|
|
|
|
Poslao: 02 Jun 2015 17:27
|
offline
- Dr.Cooler
- Građanin
- Pridružio: 18 Jun 2014
- Poruke: 178
|
Napisano: 02 Jun 2015 17:20
Probao sam i to, ali posto WHERE mora da se odnosi na obe tabele ne dobijam dobar rezultat...
Dopuna: 02 Jun 2015 17:27
A posto ja Table Head dobijam skrptom iz prvog posta mogu li nekako da napravim nesto kao foreach() i napravim poseban upit za svaki ForField i tako izlistam u Table Body?
|
|
|
|
Poslao: 02 Jun 2015 17:29
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
WHERE klauzula se odnosi na spoj te dve tabele. Dakle, praktično kao da je u pitanju potpuno nova tabela. Izvšri upiz bez WHERE klauzule čisto da vidiš šta dobijaš. Svakako, ukoliko dve tabele koje se spajaju imaju kolonu sa istim imenom, neophodno je navođenje kojoj tabeli pripada kolona koja se koristi u WHERE klauzuli. Obzirom da greška kaže da je kolona ForUser dvosmislena, to može da znači da u obe tabele postoji takva kolona, i DBMS ne može da razlikuje na koju se kolonu misli od te dve. Tako bi barem trebalo da bude, mada ne mogu da tvrdim da je tako i kod MySQL-a.
|
|
|
|
Poslao: 02 Jun 2015 17:40
|
offline
- Dr.Cooler
- Građanin
- Pridružio: 18 Jun 2014
- Poruke: 178
|
I kako da sada ja to sredim?
Tabela Fields ima: ID > ForUser > ForCategory > FieldName
Tabela Content ima: ID > ForUser > ForCategory > ForField > FieldContent
ID je nebitan jer je AUTO_INCREMENT. ForUser, ForCategory moraju biti zajednicki za obe tabele. Pozz
|
|
|
|
Poslao: 02 Jun 2015 17:53
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Dr.Cooler ::ForUser, ForCategory moraju biti zajednicki za obe tabele.Zajednički? Ili jednaki?
Dr.Cooler ::I kako da sada ja to sredim?Kao što rekoh, navedeš u upitu kojoj tabeli pripada kolona koju koristiš i to bi trebalo da bude to. Ovako nešto:
SELECT FieldName, <kolone_iz_druge_tabele>
FROM Fields INNER JOIN Content ON Content.ForField = Fields.FieldName
WHERE Fields.ForUser = '$User_Check' AND ForCategory = '$CategoryName'; Inače, ko je projektovao ovu bazu? Kakva je kardinalnost veze? Čini se kao da ima dosta redundanse...
|
|
|
|
Poslao: 02 Jun 2015 18:30
|
offline
- Dr.Cooler
- Građanin
- Pridružio: 18 Jun 2014
- Poruke: 178
|
Napisano: 02 Jun 2015 18:15
Mislio sam na jednaki. Ja sam "projektovao" bazu, zato sad nista ne mogu da uklopim, a kad sam je pravio u glavi mi je bila dosta fleksibilna...
Dopuna: 02 Jun 2015 18:30
Ne moze ni sa drugim primerom koji si mi dao, nema gresaka ali ne izlistava kako treba, na slici je izlistano iz kategorije 'Otpornici' gde su polja 'Oznaka' i 'Tolerancija', izlistan je samo FieldName u Table Head.
|
|
|
|
Poslao: 02 Jun 2015 18:47
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
To je već druga stvar. Nisi ti sastavio ispravan upit, pa zato i ne dobijaš odgovarajuće rezultate. Generalno, jako je čudno to što i u jednoj i u drugoj tabeli ti čuvaš iste podatke (mislim na ForUser i ForCategory). Ako jedna vrsta tabele Content "pripada" jednom Field-u, onda je sasvim nepotrebno da i tu čuvaš ForUser i ForCategory, pošto podatke o tome već imaš u Field-u.
Svakako, cela ova struktura je dosta konfuzna i izvučena iz konteksta, pa ni meni nije lako da ispratim sve kako treba. Generalno, sa PHP-om nemam blage veze, ali je priroda problema vezana samo za bazu, tako bih mogao da pomognem ukoliko bi sve bilo predstavljeno vrlo detaljno i jasno.
|
|
|
|