Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Uzupełnienie tablicy
damianooo
post 20.05.2017, 19:12:37
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


Chciałbym otrzymać taką kolejność ID użytkowników

  1. array(3,4,6,8,7,2,1)


w pewnym zapytaniu SQL dostaję taką tablicę (a więc brakuje ID 4 i 6)

  1. array(3,8,7,2,1)


Jak zrobić aby na pozycjach brakujących była wartość np.NULL aby zachować ustaloną wcześniej kolejność, a więc taką tablicę:

  1. array(3,null,null,8,7,2,1)


?

Ten post edytował damianooo 20.05.2017, 19:13:17
Go to the top of the page
+Quote Post
Pyton_000
post 20.05.2017, 19:29:53
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


W pewnym zapytaniu musisz dodać Null...
Go to the top of the page
+Quote Post
damianooo
post 20.05.2017, 19:43:17
Post #3





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


hmm ...
też zastanawiałem się nad tym aby od strony SQLa to zrobić tylko chyba nie wiem jak

całe "pewne zapytanie SQL" jest trochę bardziej skomplikowane:

  1. SELECT
  2. m0_.id AS id0, t1_.name AS name1,
  3. t2_.name AS name2,
  4. t3_.host_type AS host_type3,
  5. t3_.guest_type AS guest_type4,
  6. u4_.username AS username5,
  7. m0_.term AS term6
  8. FROM type t3_
  9. INNER JOIN meet m0_ ON t3_.meet_id = m0_.id
  10. INNER JOIN team t1_ ON m0_.hostTeam_id = t1_.id
  11. INNER JOIN team t2_ ON m0_.guestTeam_id = t2_.id
  12. INNER JOIN matchday m5_ ON m0_.matchday_id = m5_.id
  13. INNER JOIN user u4_ ON t3_.user_id = u4_.id
  14. WHERE m5_.id = 8
  15. ORDER BY u4_.id
  16. ASC, m0_.id ASC


Myślisz że LEFT JOIN powinienem zastosować ?
I jeśli dany użytkownik nie wytypował to powinno mi zwrócić również jego ID czy myślałeś o innym rozwiązaniu ?
Go to the top of the page
+Quote Post
nospor
post 20.05.2017, 22:00:56
Post #4





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




Jesli chcesz wyswietlic wszystkie osoby to masz robic
FROM user
a w LEFT JOIN laczyc reszte tabel.
PRzeciez to dosc logiczne


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

"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
damianooo
post 20.05.2017, 22:19:52
Post #5





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


mówisz że tak:

  1. SELECT
  2. m.id AS id0,
  3. t1.name AS name1,
  4. t2.name AS name2,
  5. t.host_type AS host_type3,
  6. t.guest_type AS guest_type4,
  7. u.username AS username5,
  8. m.term AS term6
  9. FROM user u
  10. LEFT OUTER JOIN type t ON t.user_id = u.id
  11. LEFT OUTER JOIN meet m ON t.meet_id = m.id
  12. LEFT OUTER JOIN team t1 ON m.hostTeam_id = t1.id
  13. LEFT OUTER JOIN team t2 ON m.guestTeam_id = t2.id
  14. LEFT OUTER JOIN matchday md ON m.matchday_id = md.id
  15. WHERE
  16. md.id = 8
  17. AND
  18. u.STATUS = 1
  19. ORDER BY u.id
  20. ASC, m.id ASC


?

Nadal mam 80 rekordów zamiast 100 (10 użytkowników razy 10 meczy do wytypowania)

Ten post edytował damianooo 20.05.2017, 22:20:13
Go to the top of the page
+Quote Post
nospor
post 20.05.2017, 22:23:42
Post #6





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




NIe, napisalem wyraznie LEFT JOIN.

Poza tym gdzie trzymasz tabele meczy? W meet czy w type?


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

"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
damianooo
post 20.05.2017, 22:26:28
Post #7





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


tabele meczy w meet.

Zmiana na :

  1. SELECT
  2. m.id AS id0,
  3. t1.name AS name1,
  4. t2.name AS name2,
  5. t.host_type AS host_type3,
  6. t.guest_type AS guest_type4,
  7. u.username AS username5,
  8. m.term AS term6
  9. FROM user u
  10. LEFT JOIN type t ON t.user_id = u.id
  11. LEFT JOIN meet m ON t.meet_id = m.id
  12. LEFT JOIN team t1 ON m.hostTeam_id = t1.id
  13. LEFT JOIN team t2 ON m.guestTeam_id = t2.id
  14. LEFT JOIN matchday md ON m.matchday_id = md.id
  15. WHERE
  16. md.id = 8
  17. AND
  18. u.STATUS = 1
  19. ORDER BY u.id
  20. ASC, m.id ASC


też nie pomogła

Ten post edytował damianooo 20.05.2017, 22:27:25
Go to the top of the page
+Quote Post
nospor
post 20.05.2017, 22:30:24
Post #8





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




Skoro mecze sa w meet to meet nie moze byc po type. Jak niby wezmiesz wszystkie meet jesli type nie zawiera odnosnikow do wszystkich meet...


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

"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
damianooo
post 20.05.2017, 22:36:51
Post #9





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


ale meet nie ma złączenia z user wiec jak mam zlaczyc user z meet ?
type jest zlaczone z meet i z user
Go to the top of the page
+Quote Post
nospor
post 20.05.2017, 22:46:25
Post #10





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




Albo daj user i meet we FROM
Albo meet pobieraj oddzielnym zapytaniem i lacz w sobie w php

Do wyboru do koloru 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
damianooo
post 20.05.2017, 23:00:12
Post #11





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


hmm nie wiem czemu MySQL wyrzuca bład
Unknown column 'u.id' in 'on clause'

  1. SELECT
  2. m.id AS id0,
  3. t1.name AS name1,
  4. t2.name AS name2,
  5. t.host_type AS host_type3,
  6. t.guest_type AS guest_type4,
  7. u.username AS username5,
  8. m.term AS term6
  9. FROM user u, meet m
  10. LEFT JOIN type t ON t.user_id = u.id
  11. LEFT JOIN team t1 ON m.hostTeam_id = t1.id
  12. LEFT JOIN team t2 ON m.guestTeam_id = t2.id
  13. LEFT JOIN matchday md ON m.matchday_id = md.id
  14. WHERE
  15. md.id = 8
  16. AND
  17. u.STATUS = 1
  18. ORDER BY u.id
  19. ASC, m.id ASC
Go to the top of the page
+Quote Post
nospor
post 20.05.2017, 23:01:32
Post #12





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




zapomniales o nawiasach

FROM (user u, meet m )


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

"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
damianooo
post 20.05.2017, 23:09:04
Post #13





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


Nie wiem czy wszystko jest ok dalej ponieważ poniższe wywala mi 820 rekordów.
Chyba za dużo złączeń LEFT JOIN

  1. SELECT
  2. m.id AS id0,
  3. t1.name AS name1,
  4. t2.name AS name2,
  5. t.host_type AS host_type3,
  6. t.guest_type AS guest_type4,
  7. u.username AS username5,
  8. m.term AS term6
  9. FROM (user u, meet m)
  10. LEFT JOIN type t ON t.user_id = u.id
  11. LEFT JOIN team t1 ON m.hostTeam_id = t1.id
  12. LEFT JOIN team t2 ON m.guestTeam_id = t2.id
  13. LEFT JOIN matchday md ON m.matchday_id = md.id
  14. WHERE
  15. md.id = 8
  16. AND
  17. u.STATUS = 1
  18. ORDER BY u.id
  19. ASC, m.id ASC
Go to the top of the page
+Quote Post
nospor
post 21.05.2017, 09:48:35
Post #14





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




From zwraca ci 100 rekordow. Teraz osmiu uzytkonikow wytypowalo wiec masz 8 * 100 smile.gif

Dlatego osobiscie wybralbym opcje nr 2, czyli mecze pobralbym drugim zapytaniem. Naprawde nie zawsze wszystko jest sens robic jednym zapytaniem


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

"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
damianooo
post 21.05.2017, 21:28:59
Post #15





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


.. hmm próbuję podzielić na dwa zapytania ale chciałem się Ciebie jeszcze dopytać czy to dobrze rozumiem .

Zapytanie drugie na mecze powinno wyświetlić mi 10 rekordów (bo 10 meczy do wytypowania) .

A zapytanie pierwsze powinno mi zwrócić 100 czy 82 rekordy ?

Bo zrobiłem tak jak poniżej i wychodzi mi 82 :

  1. SELECT
  2. t.host_type AS host_type3,
  3. t.guest_type AS guest_type4,
  4. u.username AS username5
  5. FROM user u
  6. LEFT JOIN type t ON t.user_id = u.id
  7. WHERE
  8. u.STATUS = 1
  9. ORDER BY u.id



Go to the top of the page
+Quote Post
nospor
post 21.05.2017, 23:07:48
Post #16





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




82. wszystko sie zgadza


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

"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
damianooo
post 22.05.2017, 21:45:51
Post #17





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


ok mam tak, typy userow:

  1. array(82) {
  2. [0]=>
  3. array(4) {
  4. ["meet_id"]=>
  5. string(1) "1"
  6. ["hostType"]=>
  7. string(1) "0"
  8. ["guestType"]=>
  9. string(1) "2"
  10. ["username"]=>
  11. string(6) "Damian"
  12. }
  13. [1]=>
  14. array(4) {
  15.  
  16. ...
  17.  
  18. }
  19. [70]=>
  20. array(4) {
  21. ["meet_id"]=>
  22. NULL
  23. ["hostType"]=>
  24. NULL
  25. ["guestType"]=>
  26. NULL
  27. ["username"]=>
  28. string(9) "Przemek 2"
  29. }
  30. [71]=>
  31. array(4) {
  32. ["meet_id"]=>
  33. NULL
  34. ["hostType"]=>
  35. NULL
  36. ["guestType"]=>
  37. NULL
  38. ["username"]=>
  39. string(6) "Adam 2"
  40. }
  41. [72]=>
  42.  
  43. ....
  44.  


i mecze

  1. array(10) {
  2. [0]=>
  3. array(5) {
  4. ["meet_id"]=>
  5. int(1)
  6. ["host"]=>
  7. string(12) "FC Barcelona"
  8. ["guest"]=>
  9. string(11) "Real Madryt"
  10. ["description"]=>
  11. string(16) "Liga Hiszpańska"
  12. ["term"]=>
  13. string(23) "Wtorek,12-12-2016,21:00"
  14. }
  15. [1]=>
  16. array(5) {
  17.  


Nastepnie złączam:

  1. foreach($meets as $meet){
  2.  
  3. foreach ($usersTypes as $types){
  4. if($meet['meet_id'] == $types['meet_id']) {
  5. if($meet['meet_id'] == null){
  6. $result[$types['meet_id']]['types'][] = '-';
  7. }else{
  8. $result[$types['meet_id']]['types'][] = $types['hostType'].' - '.$types['guestType'];
  9. }
  10. }
  11. }
  12.  
  13. $result[$meet['meet_id']]['meet_id'] = $meet['meet_id'];
  14. $result[$meet['meet_id']]['host'] = $meet['host'];
  15. $result[$meet['meet_id']]['guest'] = $meet['guest'];
  16.  
  17. }


dostaje ciagle typy tylko tych co typowali:

  1. array(10) {
  2. [1]=>
  3. array(4) {
  4. ["types"]=>
  5. array(8) {
  6. [0]=>
  7. string(5) "0 - 2"
  8. [1]=>
  9. string(5) "1 - 1"
  10. [2]=>
  11. string(5) "1 - 0"
  12. [3]=>
  13. string(5) "2 - 0"
  14. [4]=>
  15. string(5) "0 - 1"
  16. [5]=>
  17. string(5) "2 - 0"
  18. [6]=>
  19. string(5) "1 - 2"
  20. [7]=>
  21. string(5) "2 - 0"
  22. }
  23. ["meet_id"]=>
  24. int(1)
  25. ["host"]=>
  26. string(12) "FC Barcelona"
  27. ["guest"]=>
  28. string(11) "Real Madryt"
  29. }
  30. [2]=>



Chcę osiągnąć coś takiego:

  1. array(10) {
  2. [0] => array(3) {
  3. ["meet_id"] => 1,
  4. ["host"] => "team 1",
  5. ["guest"] => "team 2",
  6. ["types"] => array(10) {
  7. ["0-1","0-0","2-1","0-1","-","2-1","0-1","0-0","-","2-1"]
  8. }
  9. }
  10. [1] .... itd.
  11. }


gdzie brak typu uzytkownika bedzie oznaczane np. "-" (i ma być zachowana kolejność użytkowników)

Ten post edytował damianooo 22.05.2017, 22:05:35
Go to the top of the page
+Quote Post
nospor
post 23.05.2017, 10:12:10
Post #18





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




Jak dla mnie to tablica powinna byc po uzytkownika, w nich powinna byc informacja o meet a w meet powinny byc typy.

Ale byc moze twoj zamysl jest inny. NIe wiem co chcesz potem z ta tablica robic.


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

"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
damianooo
post 23.05.2017, 20:55:44
Post #19





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


udało się smile.gif ... miało być po prostu tak jak poniżej (wystarczyło się z tym przespać i przysiąść porządnie smile.gif ) - w sumie niewielka zmiana do tego co miałem:

  1. foreach($meets as $meet){
  2. foreach ($usersTypes as $types){
  3. if($meet['meet_id'] == $types['meet_id']) {
  4. $result[$types['meet_id']]['types'][] = $types['hostType'].' - '.$types['guestType'];
  5. }
  6. if($types['meet_id'] == NULL){
  7. $result[$meet['meet_id']]['types'][] = '-';
  8. }
  9. }
  10. $result[$meet['meet_id']]['meet_id'] = $meet['meet_id'];
  11. $result[$meet['meet_id']]['host'] = $meet['host'];
  12. $result[$meet['meet_id']]['guest'] = $meet['guest'];
  13. }


Odpowiadając @nospor na Twoje wątpliwości jaki był mój zamysł to :

entity TYPE (typ) ma meet_id oraz user_id

Potrzebowałem w szablonie TWIG wyświetlać dane w poniższy sposób:
A więc:
mecz1 i kolejno obok siebie 10 typów
mecz2 i kolejno obok siebie 10 typów
itd. :

  1. {% for key,type in types %}
  2. <tr>
  3. <td>{{ type.host }} - {{ type.guest }}</td>
  4. {% for tp in type.types %}
  5. <td>{{ tp }}</td>
  6. {% endfor %}
  7. </tr>
  8. {% endfor %}
  9. </table>


do tego potrzebowałem takiej tablicy:

  1. array(10) {
  2. [0] => array(4) {
  3. ["meet_id"] => 1,
  4. ["host"] => "team 1",
  5. ["guest"] => "team 2",
  6. ["types"] => array(10) {
  7. ["0-1","0-0","2-1","0-1","-","2-1","0-1","0-0","-","2-1"]
  8. }
  9. }
  10. [1] .... itd.
  11. }


dzięki raz jeszcze za pomoc

Ten post edytował damianooo 23.05.2017, 22:04:29
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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 11:48