Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyświetlenie zapytania MySQL wykorzystującego aliasy.
Bosmanircx
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.11.2006

Ostrzeżenie: (0%)
-----


Mam problem z wyświetlaniem rezultatu zapytania MySQLowego. Na pierwszy rzut oka sprawa banalna. A jednak.

Mam 2 tabele (Dla ułatwienia tabele razem z danymi):

Tabela A.
  1. CREATE TABLE `tabA` (
  2. `ida` int(5) NOT NULL AUTO_INCREMENT,
  3. `war1` int(5) NOT NULL,
  4. `war2` int(5) NOT NULL,
  5. `war3` int(5) NOT NULL,
  6. PRIMARY KEY (`ida`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
  8.  
  9. INSERT INTO `tabA` (`ida`, `war1`, `war2`, `war3`) VALUES
  10. (1, 1, 2, 3),
  11. (2, 2, 2, 1),
  12. (3, 3, 1, 1),
  13. (4, 3, 2, 3);


Tabela B.
  1. CREATE TABLE `tabB` (
  2. `idb` int(5) NOT NULL AUTO_INCREMENT,
  3. `warx` varchar(2) NOT NULL,
  4. PRIMARY KEY (`idb`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
  6.  
  7. INSERT INTO `tabB` (`idb`, `warx`) VALUES
  8. (1, 'a'),
  9. (2, 'b'),
  10. (3, 'c'),
  11. (4, 'd');


Moje zapytanie.
  1. SELECT `tabA`.`ida` , `tabA`.`war3` , `tabB`.`warx` , `tabA`.`war1` , `tabA`.`war2` , `tabB_1`.`warx` , `tabB_2`.`warx`
  2. FROM `intranet`.`tabB` `tabB_2`
  3. RIGHT OUTER JOIN (`intranet`.`tabB` `tabB_1`
  4. RIGHT OUTER JOIN (`intranet`.`tabB` `tabB`
  5. RIGHT OUTER JOIN `intranet`.`tabA` `tabA` ON `tabB`.`idb` = `tabA`.`war1`
  6. ) ON `tabB_1`.`idb` = `tabA`.`war2`
  7. ) ON `tabB_2`.`idb` = `tabA`.`war3`

Zapytanie jest na 100% dobre ponieważ po wykonaniu go np w phpMyAdmin działa super.


Rezultat, który chce uzyskać.

id 1,00
1,00 a
2,00 b
3,00 c

id 2,00
2,00 b
2,00 b
1,00 a

id 3,00
3,00 c
1,00 a
1,00 a

id 4,00
3,00 c
2,00 b
3,00 c


Strona z zapytaniem.


  1. mysql_select_db($database_intanet, $intanet);
  2. $query_Recordset1 = "SELECT `tabA`.`ida` , `tabA`.`war3` , `tabB`.`warx` , `tabA`.`war1` , `tabA`.`war2` , `tabB_1`.`warx` , `tabB_2`.`warx` FROM `intranet`.`tabB` `tabB_2` RIGHT OUTER JOIN ( `intranet`.`tabB` `tabB_1` RIGHT OUTER JOIN ( `intranet`.`tabB` `tabB` RIGHT OUTER JOIN `intranet`.`tabA` `tabA` ON `tabB`.`idb` = `tabA`.`war1` ) ON `tabB_1`.`idb` = `tabA`.`war2` ) ON `tabB_2`.`idb` = `tabA`.`war3`";
  3. $Recordset1 = mysql_query($query_Recordset1, $intanet) or die(mysql_error());
  4. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  5. $totalRows_Recordset1 = mysql_num_rows($Recordset1);
  6. ?>
  7.  
  8.  
  9. <table border="0">
  10.  <tr>
  11.    <td>ida</td>
  12.    <td>war3</td>
  13.    <td>warx</td>
  14.    <td>war1</td>
  15.    <td>war2</td>
  16.    <td>warx</td>
  17.    <td>warx</td>
  18.  </tr>
  19.  <?php do { ?>
  20.    <tr>
  21.      <td><?php echo $row_Recordset1['ida']; ?></td>
  22.      <td><?php echo $row_Recordset1['war3']; ?></td>
  23.      <td><?php echo $row_Recordset1['warx']; ?></td>
  24.      <td><?php echo $row_Recordset1['war1']; ?></td>
  25.      <td><?php echo $row_Recordset1['war2']; ?></td>
  26.      <td><?php echo $row_Recordset1['warx']; ?></td>
  27.      <td><?php echo $row_Recordset1['warx']; ?></td>
  28.    </tr>
  29.    <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
  30. </table>
  31. <?php
  32. mysql_free_result($Recordset1);
  33. ?>


Problem
  1. <?php echo $row_Recordset1['warx']; ?>
- wyświetla pierwszą dana. Nie wiem jak wyświetlić pozostałe "warx". Przez to że w zapytaniu tworzone były aliasy, mam 3 zmienne o nazwie "warx".
próbowałem wywoływać je podajac dodatkowo alias tabeli czyli:
  1. <?php echo $row_Recordset1['tabB'.'warx']; ?>
  2. <?php echo $row_Recordset1['tabB_1'.'warx']; ?>
  3. <?php echo $row_Recordset1['tabB_2'.'warx']; ?>


Oczywiście nie dało to pożądanego rezultatu.
Jak wyświetlić "warx" z tabeli "tabB", "warx" z tabeli "tabB_1", "warx" z tabeli "tabB_2"?
Z cała pewnością da się wyświetlić wszystkie dane z zapytania tylko moja wiedza jest zbyt płytka.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
tomek_
post
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 4
Dołączył: 6.11.2008
Skąd: Bytom

Ostrzeżenie: (0%)
-----


np tak 

  1. <?php
  2. //poczatek tabeli
  3.  
  4. for($i=0;$i<$totalRows_Recordset1; $i++)
  5.  
  6. {
  7.  
  8. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  9.  
  10. //wyświetlenie kolejnych wierszy tak jak teraz wyświetlasz ten jeden
  11.  
  12. }
  13.  
  14. //koniec tabeli
  15. ?>


--------------------
Dysortografik -> nie besztać za błędy ;P

pomogłem ? -> kliknij "pomógł" ;)
Go to the top of the page
+Quote Post
Bosmanircx
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.11.2006

Ostrzeżenie: (0%)
-----


Problem w tym, że nie wszystkie dane chcą się wyświetlić.
dana:
Ida – Wyświetla się
war3 - Wyświetla się
warx – z TabB Wyświetla się
war1 - Wyświetla się
warx – z TabB_1 Nie wyświetla się
war2 - Wyświetla się
warx – z TabB_2 Nie wyświetla się

Ciekawostką jest to, że w PhpMyAdmin dane dobrze się wyświetlają.
Przyczyna kłopotów jest fakt, że zostały utworzone 2 aliasy (TabB_1 i Tabb_2) tabeli TabB.



Sprawa teoretycznie wygląda prosto dwie połączone tabele, z których trzeba wyświetlić dane. Komplikuje sprawę zapytacie SQL, które trzykrotnie wykorzystuje do zapytania te sama tabele. Za każdym razem tworząc nowe aliasy tabeli TabB. Mam nadzieje, że znajdzie się ktoś, kto spróbuje wpisać powyższe tabele do swojej bazy i wykonać zapytanie zarówno w PhpMyAdmin jak i we własnym kodzie PHP.

Można to potraktować jak pewnego rodzaju wyzwanie. Ja nie spodziewałem się, że będę miał kiedykolwiek z taka operacją kłopoty. Po prostu wcześniej nie miałem kontaktu z tak zagmatwanymi zapytaniami na stronie.

Z góry dziękuję wszystkim próbującym rozwiązać ten problem za poświęcony na to czas. blink.gif
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




nazwy kolumn sie nadpisuja. jak chcesz wyswietlic te samo kolumny z innych tabel, musisz nadac im aliasy:
  1. SELECT tab1.warx warx1, tab2.warx warx2 ....

I teraz twoje kolumny sa widziane pod warx1, warx2


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Bosmanircx
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.11.2006

Ostrzeżenie: (0%)
-----


Dziękuję ślicznie Panie nospor. To jest dokładnie ta odpowiedz jaka mi się marzyła. Widać od razu że mam do czynienia z fachowcem najwyższego szczebla.

A dla pozostałych, tych co się dopiero uczą, podaje zapytanie z przed porady Pana nospor.

  1. SELECT `tabA`.`ida` , `tabA`.`war3` , `tabB`.`warx` , `tabA`.`war1` , `tabA`.`war2` , `tabB_1`.`warx` , `tabB_2`.`warx`
  2. FROM `intranet`.`tabB` `tabB_2`
  3. RIGHT OUTER JOIN (`intranet`.`tabB` `tabB_1`
  4. RIGHT OUTER JOIN (`intranet`.`tabB` `tabB`
  5. RIGHT OUTER JOIN `intranet`.`tabA` `tabA` ON `tabB`.`idb` = `tabA`.`war1`
  6. ) ON `tabB_1`.`idb` = `tabA`.`war2`
  7. ) ON `tabB_2`.`idb` = `tabA`.`war3`



Po poradzie Pana nospor.

  1. SELECT `tabA`.`ida` , `tabA`.`war3` , `tabB`.`warx` `warx0` , `tabA`.`war1` , `tabA`.`war2` , `tabB_1`.`warx` `warx1` , `tabB_2`.`warx` `warx2`
  2. FROM `intranet`.`tabB` `tabB_2`
  3. RIGHT OUTER JOIN ( `intranet`.`tabB` `tabB_1`
  4. RIGHT OUTER JOIN ( `intranet`.`tabB` `tabB`
  5. RIGHT OUTER JOIN `intranet`.`tabA` `tabA` ON `tabB`.`idb` = `tabA`.`war1`
  6. ) ON `tabB_1`.`idb` = `tabA`.`war2`
  7. ) ON `tabB_2`.`idb` = `tabA`.`war3`
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Widze obce są Ci obyczaje na forum to przy okazji tego tematu krótkie wyjaśnienie:
1) żaden "Pan". My tu wszyscy na równi, tak więc wystarczy "nospor"
2)
Cytat
Widać od razu że mam do czynienia z fachowcem najwyższego szczebla.
Odpowiedź na proste pytanie nie czyni z nikogo fachowcem najwyższego szczebla. Na przyszłość zwykłe "Dziękuję" wystarczy, bez żadnych dodatkowych przymiotników winksmiley.jpg

smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 17:03