Jump to content

need help getting right query


karimali831

Recommended Posts

Hey, need some help please!  8)

 

Standard query 1:

 

help1.png

 

Query 2:

 

help2.png

 

1) in clan1 they vs. all of clan 2, there is a row for every ID

2) but clan1 must vs. all of every other clan1 also

 

does this make sense?

 

so query 2 should be something like this:

 

clan1  clan2

  1        8

  1        10

  1        4

  1        3

  1        7

  1        9

  3        8

  3        10

  3        4

  3        1

  3        7

  3        9

 

etc.

 

anyone change query 2 for me to make it like this please?

Link to comment
https://forums.phpfreaks.com/topic/261956-need-help-getting-right-query/
Share on other sites

Your query 2 looks almost good but needs to be a left join and I believe the syntax you're using intimates an inner join.

Try doing this (not tested)

SELECT [same]

FROM table a

LEFT JOIN table b

on a.matchNo = b.matchNo

 

This would get you

 

In your first example, unless you cut off rows, there is no example where clan1 = 1 and clan2 = 3.

 

Do you have a separate table of the clan ids? That is what you'll need I think to get the desired result.

Then it would be

SELECT a.*, b.*

FROM clans a

LEFT JOIN clans b

on a.clan_id != b.clan_id

 

Would get you the list of clans vs each other.

quick and dirty, but I believe that is what you want (same query that you have before in Query 2 just using JOIN and UNION for the second part)

 

SELECT a.cupid,
       a.laid,
       a.matchno,
       a.clan1,
       b.clan2 AS 'versus',
       a.comment,
       a.1on1
FROM ws_bi2_cup_matches a
     JOIN ws_bi2_cup_matches b ON a.cupID = b.cupID AND b.cupID = 'a' AND b.matchno = '6' AND a.clan2 != b.clan2 AND b.type = 'gs'
UNION
SELECT a.cupid,
       a.laid,
       a.matchno,
       a.clan1,
       b.clan1 AS 'versus',
       a.comment,
       a.1on1
FROM ws_bi2_cup_matches a
     JOIN ws_bi2_cup_matches b ON a.cupID = b.cupID AND b.cupID = 'a' AND b.matchno = '6' AND a.clan1 != b.clan1 AND b.type = 'gs'
WHERE a.matchno = '6'
ORDER BY clan1 DESC, versus;

To get every combination of clan x vs clan y you nedd a cartesian (or cross) join.

 

you can either omit the join condition

SELECT a.clan_id, b.clan_id
FROM clan a, clan b
WHERE a.clan_id <> b.clan_id

 

or specify CROSS JOIN

SELECT a.clan_id, b.clan_id
FROM clan a CROSS JOIN clan b
WHERE a.clan_id <>b.clan_id

Thanks all, this join/cross query is very confusing for me, I tried the union in mikosiko post but it seems to selecting too much!

 

help3.png

 

Query:

 

SELECT a.cupID, a.ladID, a.matchno, a.clan1, b.clan2 AS 'versus', a.comment, a.1on1
FROM ws_bi2_cup_matches a
JOIN ws_bi2_cup_matches b ON a.cupID = b.cupID
AND b.cupID = 'a'
AND b.matchno = '6'
AND a.clan2 != b.clan2
AND b.type = 'gs'
UNION
SELECT a.cupID, a.ladID, a.matchno, a.clan1, b.clan1 AS 'versus', a.comment, a.1on1
FROM ws_bi2_cup_matches a
JOIN ws_bi2_cup_matches b ON a.cupID = b.cupID
AND b.cupID = 'a'
AND b.matchno = '6'
AND a.clan1 != b.clan1
AND b.type = 'gs'
WHERE a.matchno = '6'
ORDER BY `clan1` ASC

 

I noticed it selecting rows where matchno = 5 and not 6 as stated in query?

 

after small adjustments... try this

(SELECT a.cupid,
       a.ladid,
       a.matchno,
       a.clan1,
       b.clan2 AS 'versus',
       a.comment,
       a.1on1
FROM ws_bi2_cup_matches a
     JOIN ws_bi2_cup_matches b ON a.cupID = b.cupID AND b.cupID = 'a' 
                                        AND b.matchno = '6' 
                                        AND a.clan2 != b.clan2 
                                        AND b.type = 'gs'
WHERE a.matchno = '6'
  AND a.type = 'gs')
UNION
(SELECT a.cupid,
       a.ladid,
       a.matchno,
       a.clan1,
       b.clan1 AS 'versus',
       a.comment,
       a.1on1
FROM ws_bi2_cup_matches a
     JOIN ws_bi2_cup_matches b ON a.cupID = b.cupID AND b.cupID = 'a' 
                                        AND b.matchno = '6' 
                                        AND a.clan1 != b.clan1 
                                        AND b.type = 'gs'
WHERE a.matchno = '6'
  AND a.type = 'gs')
ORDER BY clan1 DESC, versus;

Sorry I didn't get back sooner and thanks again for the help!

 

I am trying to put this into INSERT INTO()

 

safe_query("INSERT INTO ".PREFIX."cup_matches ($type, $type_opp, matchno, clan1, clan2, comment, 1on1) ((
SELECT a.$type,
       a.$type_opp,
       a.matchno,
       a.clan1,
       b.clan2 AS 'versus',
       a.comment,
       a.1on1
FROM ".PREFIX."cup_matches a
     JOIN ws_bi2_cup_matches b ON a.$type = b.$type AND b.$type = 'a' 
                                        AND b.matchno = '$ID' 
                                        AND a.clan2 != b.clan2 
                                        AND b.type = 'gs'
WHERE a.matchno = '$ID'
  AND a.type = 'gs')
UNION (
SELECT a.$type,
       a.$type_opp,
       a.matchno,
       a.clan1,
       b.clan1 AS 'versus',
       a.comment,
       a.1on1
FROM ".PREFIX."cup_matches a
     JOIN ws_bi2_cup_matches b ON a.$type = b.$type AND b.$type = 'a' 
                                        AND b.matchno = '$ID' 
                                        AND a.clan1 != b.clan1 
                                        AND b.type = 'gs'
WHERE a.matchno = '$ID'
  AND a.type = 'gs')
ORDER BY clan1 DESC, versus)");

 

I get this error:

 

error=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( SELECT a.cupID, a.ladID, a.matchno, a.clan1, b.cla' at line 1
query=INSERT INTO ws_bi2_cup_matches (cupID, ladID, matchno, clan1, clan2, comment, 1on1) (( SELECT a.cupID, a.ladID, a.matchno, a.clan1, b.clan2 AS 'versus', a.comment, a.1on1 FROM ws_bi2_cup_matches a JOIN ws_bi2_cup_matches b ON a.cupID = b.cupID AND b.cupID = 'a' AND b.matchno = '6' AND a.clan2 != b.clan2 AND b.type = 'gs' WHERE a.matchno = '6' AND a.type = 'gs') UNION ( SELECT a.cupID, a.ladID, a.matchno, a.clan1, b.clan1 AS 'versus', a.comment, a.1on1 FROM ws_bi2_cup_matches a JOIN ws_bi2_cup_matches b ON a.cupID = b.cupID AND b.cupID = 'a' AND b.matchno = '6' AND a.clan1 != b.clan1 AND b.type = 'gs' WHERE a.matchno = '6' AND a.type = 'gs') ORDER BY clan1 DESC, versus)

 

I have been trying the last hour to figure what's wrong?

Thanks that worked but there is problem:-

 

It shouldn't be generating the rows in red as they already exist, everything above is fine:-

 

prob1.png

 

Query:-

 

safe_query("INSERT INTO ".PREFIX."cup_matches ($type, $type_opp, matchno, clan1, clan2, comment, 1on1) 
(SELECT a.$type,
       a.$type_opp,
       a.matchno,
       a.clan1,
       b.clan2 AS 'versus',
       a.comment,
       a.1on1
FROM ".PREFIX."cup_matches a
     JOIN ws_bi2_cup_matches b ON a.$type = b.$type AND b.$type = 'a' 
                                        AND b.matchno = '$ID' 
                                        AND a.clan2 != b.clan2 
                                        AND b.type = 'gs'
WHERE a.matchno = '$ID'
  AND a.type = 'gs')
UNION
(SELECT a.$type,
       a.$type_opp,
       a.matchno,
       a.clan1,
       b.clan1 AS 'versus',
       a.comment,
       a.1on1
FROM ".PREFIX."cup_matches a
     JOIN ws_bi2_cup_matches b ON a.$type = b.$type AND b.$type = 'a' 
                                        AND b.matchno = '$ID' 
                                        AND a.clan1 != b.clan1 
                                        AND b.type = 'gs'
WHERE a.matchno = '$ID'
  AND a.type = 'gs')
ORDER BY clan1 DESC, versus");

 

These rows will already be inserted:-

 

prob2.png

 

It's really close though :)

 

Take a look at my pic above I circled in red where player 1 or player 2 is Karim.

 

The rows showing where Karim is player 1 is right,  there are 7 rows there.

The rows showing where Karim is player 2 is wrong, there are 3 rows.

 

Would you be able to help please?

How can I go about doing this? (last request please :-\)

 

This is the code, works fine now with inserting rows, thanks again :)

the extra column I want to insert data to is "wk" and the values of it should be 1-7 as shown:

 

success.png

 

     for($i = 1; $i <= 8; $i++) {
     
        switch($i) {
	   case 1: $var_alpha = $rows_a; $let_alpha = 'a';
	   break;
	   case 2: $var_alpha = $rows_b; $let_alpha = 'b';
	   break;
	   case 3: $var_alpha = $rows_c; $let_alpha = 'c';
	   break;
	   case 4: $var_alpha = $rows_d; $let_alpha = 'd'; 
	   break;
	   case 5: $var_alpha = $rows_e; $let_alpha = 'e'; 
	   break;
	   case 6: $var_alpha = $rows_f; $let_alpha = 'f';
	   break;
	   case 7: $var_alpha = $rows_g; $let_alpha = 'g'; 
	   break;
	   case 8: $var_alpha = $rows_h; $let_alpha = 'h';
	   break;
	}
     
        if($var_alpha != $max_participants) {

                   safe_query("INSERT INTO ".PREFIX."cup_matches ($type, $type_opp, matchno, clan1, clan2, comment, 1on1) 
                   (SELECT a.$type,
                          a.$type_opp,
                          a.matchno,
                          a.clan1,
                          b.clan2 AS 'versus',
                          a.comment,
                          a.1on1
                   FROM ".PREFIX."cup_matches a
                        JOIN ws_bi2_cup_matches b ON a.$type = b.$type AND b.$type = '$let_alpha' 
                                                           AND b.matchno = '$ID' 
                                                           AND a.clan2 != b.clan2				
                                                           AND b.type = 'gs'
                   WHERE a.matchno = '$ID'
                     AND a.type = 'gs')
                   UNION
                   (SELECT a.$type,
                          a.$type_opp,
                          a.matchno,
                          a.clan1,
                          b.clan1 AS 'versus',
                          a.comment,
                          a.1on1
                   FROM ".PREFIX."cup_matches a
                        JOIN ws_bi2_cup_matches b ON a.$type = b.$type AND b.$type = '$let_alpha' 
                                                           AND b.matchno = '$ID' 
                                                           AND a.clan1 <  b.clan1 
                                                           AND b.type = 'gs'
                   WHERE a.matchno = '$ID'
                     AND a.type = 'gs')
                   ORDER BY clan1 DESC, versus");

	}
     
     }

if the index needs to be reset for every new clan1 then it gets very complicated.

 

This is easy as you can declare a mysql variable and increment it by 1 for each record

 

A- B-1

A-C-2

A- D-3

B-C-4

B-D-5

 

This is complicated

 

A- B-1

A-C-2

A- D-3

B-C-1

B-D-2

 

 

which is your scenario ?

 

 

 

 

 

I see the problem now, there cannot be the same team in the same week more than once.

Each team has 7 matches each, so it is 7 weeks.

 

It doesn't have to be in the insert query I can use update after insert.

 

I will re-think this later.

 

http://s16.postimage.org/th6kv9m77/PROB3.png

PROB3.png

I just noticed something I can't believe I didn't spot, it generates 7 matches for clan1 which are all the matches but for clan2 is only generates 4 matches if you take a look at image in previous post.

 

That is because clan2 player is not playing match with another clan2 player ... in that case you need to have another union

 

 

I fixed that, this is final scenario now:

 

If it is possible to insert the week values whether insert() or update() that would be great,

it does seem complicated!  :shrug: you see each match a team has there are 7 so the week

values should be inserted as follow:-

 

week 1 values are already inserted, each week there are 4 matches.

 

http://s15.postimage.org/s4x5i0ard/success_final.png

 

success_final.png

 

Code:

     for($i = 1; $i <= 8; $i++) {
     
        switch($i) {
	   case 1: $var_alpha = $rows_a; $let_alpha = 'a';
	   break;
	   case 2: $var_alpha = $rows_b; $let_alpha = 'b';
	   break;
	   case 3: $var_alpha = $rows_c; $let_alpha = 'c';
	   break;
	   case 4: $var_alpha = $rows_d; $let_alpha = 'd'; 
	   break;
	   case 5: $var_alpha = $rows_e; $let_alpha = 'e'; 
	   break;
	   case 6: $var_alpha = $rows_f; $let_alpha = 'f';
	   break;
	   case 7: $var_alpha = $rows_g; $let_alpha = 'g'; 
	   break;
	   case 8: $var_alpha = $rows_h; $let_alpha = 'h';
	   break;
	}
     
        if($var_alpha != $max_participants) {

                   safe_query("INSERT INTO ".PREFIX."cup_matches ($type, $type_opp, matchno, clan1, clan2, comment, 1on1) 
                   (SELECT a.$type,
                          a.$type_opp,
                          a.matchno,
                          a.clan1,
                          b.clan2 AS 'versus',
                          a.comment,
                          a.1on1
                   FROM ".PREFIX."cup_matches a
                        JOIN ws_bi2_cup_matches b ON a.$type = b.$type AND b.$type = '$let_alpha' 
                                                           AND b.matchno = '$ID' 
                                                           AND a.clan2 != b.clan2				
                                                           AND b.type = 'gs'
                   WHERE a.matchno = '$ID'
                     AND a.type = 'gs')
                   UNION
                   (SELECT a.$type,
                          a.$type_opp,
                          a.matchno,
                          a.clan2,
                          b.clan1 AS 'versus',
                          a.comment,
                          a.1on1
                   FROM ".PREFIX."cup_matches a
                        JOIN ws_bi2_cup_matches b ON a.$type = b.$type AND b.$type = '$let_alpha' 
                                                           AND b.matchno = '$ID' 
                                                           AND a.clan1 != b.clan1 
                                                           AND b.type = 'gs'
                   WHERE a.matchno = '$ID'
                     AND a.type = 'gs')
                   ORDER BY clan1 DESC, versus");

	}
     
     }

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.